如何单次遍历对象数组同时生成两个对应字段的数组
实现方案
基础写法(易理解)
直接在单次遍历中同时给两个结果数组推送对应字段即可,仅执行1次O(n)复杂度的遍历:
const array = [{name: "first", val: 1}, {name: "second", val: 2}]; const arrayOne = []; const arrayTwo = []; array.forEach(item => { arrayOne.push(item.name); arrayTwo.push(item.val); });
函数式写法
用reduce方法可以不用提前声明变量,一次迭代直接返回两个结果数组:
const array = [{name: "first", val: 1}, {name: "second", val: 2}]; const [arrayOne, arrayTwo] = array.reduce((acc, curr) => { acc[0].push(curr.name); acc[1].push(curr.val); return acc; }, [[], []]);
两种写法都只会遍历原数组一次,数组长度较大时,性能优势会明显高于两次单独map提取的方案。
内容的提问来源于stack exchange,提问作者Tzachi
相关产品推荐
相关产品推荐

