js遍历数组常用基本就是 map,reduce,forEach,for...of
- map 针对是返回值处理情况,关于忽略操作不友好,建议使用reduce
- reduce 不仅仅是官方文档示例,求和的语法。常用就是数组累加,对象属性累加,可友好处理返回值
- forEach 可友好处理map的忽略问题,return false 相当于 break 效果,跳出循环,return true 相当于 continue。对于累加建议使用 reduce,无需再定义一个新的对象
- for...of 是 for...in 的优化版本,比直接 for 循环操作集合友好一些
return row[prop].reduce((acc, cur, idx) => {
acc.push({key: row[`${prop}_id`][idx], label: cur });
return acc;
}, []);
关于和 async/await 结合,测试发现,除了 for...of 外,其余都是异步执行【map 未测试】,即在循环内若使用await,在循环外是不能同步拿到解析的值,reduce第二次直接返回一个 pending 状态的 Promise
// NOTE: 当 async/await 遇上 forEach
const res = [];
for (let val of condition) {
multiple.val = val;
const resList = await _queryFormOrProcess(
ctx,
{ formId, conditions, compId_tip },
{ isForm, errMsg }
);
// 以第一条查询为主数据, 合并明细
if (!res.length) {
res.push(...resList);
} else {
res[0].formData[compId_detail_src].push(
...resList[0].formData[compId_detail_src]
);
}
}
return res;
for-of 可以遍历各种集合对象的属性值,要求被遍历的对象需要实现迭代器 (iterator) 方法,例如 myObjectSymbol.iterator 用于告知 JS 引擎如何遍历该对象。一个拥有 Symbol.iterator 方法的对象被认为是可遍历的。