javascript 如何有条件地添加变量到一个反结构化赋值中?

jpfvwuh4  于 2023-02-15  发布在  Java
关注(0)|答案(1)|浏览(87)

我正在构建一个函数,用SheetJS将JSON对象导出到Excel文件。在导出数据之前,我需要过滤它,使其只包含某些字段/属性。我有一个.map()方法,该方法带有一个接受多个参数的解构赋值。每个参数都是一个字段,在生成报表之前应该从JSON数据中过滤掉。有些字段总是被过滤掉,比如下面代码中的“favorite”或“linkedinsummary”。但是其他字段,比如“comments”只有在用户决定不包含它的情况下才应该被过滤掉。我的问题是我不知道如何有条件地将某些字段添加到重构赋值中。我尝试了以下方法:

//this filters out all the fields that should not appear in the report
    const filteredProfiles = transformedProfiles.map((profile) => {
        const {
            //Below: fields to filter out
            favourite,
            linkedinsummary,
            
            ...filteredProfile
        } = profile;

        const result = {...filteredProfile};

        //if the user has decided that "comments" should not be included, then add it to the 
        list above
        if (!store.state.userData.proptions.fields.comments) {
            result.comments = profile.comments;
        }

        return result;
    });

如果我直接向列表中添加“comments”,它会起作用,“comments”会被忽略。但是对于上面这样的条件语句,“comments”仍然会被导出到报表中。

jdgnovmf

jdgnovmf1#

从操作员最后的评论来看...

  • ..."如何根据用户选择筛选出要排除的字段数可变的transformedProfiles数组?例如,应始终筛选出favouritelinkedinsummary。但仅当store.state.userData.proptions.fields.comments为false时,才应筛选出comments。"* -jeff 3546

......从我上面的一条评论来看......
_@jeff3546......这是否正确?...... if (!store.state.userData.proptions.fields.comments) {result.comments = profile.comments;}......一般翻译为...... “每当fields没有某个属性或属性值为*false错误时,必须将其从profile分配给result。"*...或者换句话说... *“无论fields具有什么truthy**属性名称,都必须从result中删除其相关键/属性。"*
如果上述内容正确,则OP提供的示例代码将更改为与下一个提供的代码类似的通用实现...

const listOfDismissedKeys = Object
 .entries(store.state.userData.proptions.fields)
 //.filter(([key, value]) => value !== false)
 //.filter(([key, value]) => value === true)
 .filter(([key, value]) => !!value)
 .map(([key]) => key);

const filteredProfiles = transformedProfiles
  .map(profile => {
    const { favourite, linkedinsummary, ...result } = profile;
    listOfDismissedKeys
      .forEach(key =>
        Reflect.deleteProperty(result, key)
      );
    return result;
  });

相关问题