Javascript 在es6中使用map筛选并返回新对象

Javascript 在es6中使用map筛选并返回新对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我有以下代码: allDesignDocs.rows.forEach((row: any) => { if (!designDocsName.includes(row.id.replace("_design/", ""))) { toBeRemoved = [{ _id: row.id, _rev: row.value.rev, "_deleted": true }, ...toBeRemoved]; } });

我有以下代码:

      allDesignDocs.rows.forEach((row: any) => {
        if (!designDocsName.includes(row.id.replace("_design/", ""))) {
          toBeRemoved = [{ _id: row.id, _rev: row.value.rev, "_deleted": true }, ...toBeRemoved];
        }

      });
这很好用。但是,我希望使用就地更新方法。所以我选择了map而不是foreach:

  var test = allDesignDocs.rows.map((row: any) => {
    if (!designDocsName.includes(row.id.replace("_design/", ""))) {
      return { _id: row.id, _rev: row.value.rev, "_deleted": true };
    }

  });

因此,当条件不满足时,上面返回的数组包括未定义的数组。我只希望数组包含从if内部返回的值,并忽略所有未定义的值。我知道我可以循环尝试结果并清理它,但这不是一种干净的方式。是否有任何es6功能可以提供上述功能?

您可以使用
.reduce

例如:

[1,2,3,4].reduce((acc,n)=>{
    if (n % 2 == 0) {
        acc.push(n*4)
    }
    return acc;
},[])

这将产生一个偶数*4的列表,或者组合
.filter
.map
您可以使用
.reduce

例如:

[1,2,3,4].reduce((acc,n)=>{
    if (n % 2 == 0) {
        acc.push(n*4)
    }
    return acc;
},[])
它将生成偶数*4的列表,或者组合
.filter
.map
使用after来过滤
未定义的值

var test = allDesignDocs.rows.map((row: any) => {
   if (!designDocsName.includes(row.id.replace("_design/", ""))) {
     return { _id: row.id, _rev: row.value.rev, "_deleted": true };
   }
 }).filter(item => item !== undefined); // Can also use filter(item => item);
或使用:

使用after可过滤
未定义的值

var test = allDesignDocs.rows.map((row: any) => {
   if (!designDocsName.includes(row.id.replace("_design/", ""))) {
     return { _id: row.id, _rev: row.value.rev, "_deleted": true };
   }
 }).filter(item => item !== undefined); // Can also use filter(item => item);
或使用:


.map
将对数组进行1:1转换。如果您只想返回部分项目,则需要
.filter
@VLAZ Yes,但使用filter将返回提供给它的确切行,但是我有一个转换,并返回一个自定义对象:{u id:row.id,_rev:row.value.rev,“_deleted”:true}
.filter().map()
.map
将对数组进行1:1转换。如果您只想返回部分项目,则需要
.filter
@VLAZ Yes,但使用filter将返回提供给它的确切行,但是我有一个转换,并返回一个自定义对象:{u id:row.id,_rev:row.value.rev,“_deleted”:true}
.filter().map()
是,但使用filter将返回馈送给它的确切行,但是我有一个转换,并返回一个自定义对象:{u id:row.id,_rev:row.value.rev,“_deleted”:true};是的,但使用筛选器将返回提供给它的确切行,但是我有一个转换,并返回一个自定义对象:{{u id:row.id,{u rev:row.value.rev,“{u deleted”:true};