3 回答
TA贡献1824条经验 获得超5个赞
这是因为reduce将你给它的元素加起来。例如,采用以下代码:
let arr = [1,2,3,4,5];
console.log(arr.reduce((before, value)=>before+value));
此代码获取每个value并将其添加到before. 然后它将添加的值传递给变量中的reduce,的下一次迭代。before
在您的代码中,您将一个数组传递给before,或者在您的情况下acc,并从该数组连接(合并)一个新数组gadgets['computers']并返回该数组。这将根据对象数组创建计算机列表。
更多信息在reduce 这里。
TA贡献1828条经验 获得超13个赞
如果您希望输出是数组数组。尝试这个:
var gadjets = [
{ computers: ["asus", "hp"], sellphones: ["Galaxy", "Nokia"] },
{ computers: ["dell", "insys"], sellphones: ["iphone", "samsung"] }
];
const groupBy = key => {
let res = gadjets.reduce((objectsByKeyValue, obj) => {
let arr = [];
arr.push(obj[key]);
return objectsByKeyValue.concat(arr);
}, []);
return res;
};
console.log(groupBy("computers"));
TA贡献2065条经验 获得超14个赞
但它不应该返回吗
我不确定你想在那里向我们展示什么,但如果你的意思是
[['asus','hp'],['dell', 'insys']]
那么不,不应该。concat将您传递的数组展平(到单个级别):
const a = [].concat(['asus','hp'], ['dell', 'insys']);
console.log(a); // ["asus", "hp", "dell", "insys"]
所以acc.concat(gadjet[computers])将这些数组中的每一个展平computers成一个新数组,这是reduce.
添加回答
举报