我有以下代码:
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函数可以提供上述功能?
答案 0 :(得分:3)
在filter()之后使用map()来过滤undefined
的值。
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);
或使用reduce():
var test = allDesignDocs.rows.reduce((acc, row: any) => {
if (!designDocsName.includes(row.id.replace("_design/", ""))) {
acc.push({ _id: row.id, _rev: row.value.rev, "_deleted": true });
}
return acc;
}, []);
答案 1 :(得分:0)
您可以使用.reduce
例如:
[1,2,3,4].reduce((acc,n)=>{
if (n % 2 == 0) {
acc.push(n*4)
}
return acc;
},[])
这将产生一个偶数* 4的列表,或者组合.filter
和.map
。