Lea*_*ner 2 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];
}
});
Run Code Online (Sandbox Code Playgroud)
效果很好。不过我想使用就地更新方法。所以我选择了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 };
}
});
Run Code Online (Sandbox Code Playgroud)
因此,当条件不满足时,上面会返回包含 undefined 的数组。我只希望数组包含从 if 内部返回的值并忽略所有未定义的值。我知道我可以循环遍历结果并清理它,但这不是一个干净的方法。es6有没有函数可以提供上述功能?
在map()之后使用filter()来过滤值。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);
Run Code Online (Sandbox Code Playgroud)
或者使用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;
}, []);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |