【发布时间】:2020-06-21 12:40:12
【问题描述】:
所以假设我的数组如下所示:
let langArr = [
["python", "blue"]
,["python", "blue"]
,["c++", "red"]
,["java", "yellow"]
,["javascript", "lime"]
,["shell", "green"]
,["c++", "red"]
];
我想要的是这样的:
{
python: {
count: 2
color: "blue"
}
c++: {
count: 2
color: "red"
}
java: {
count: 1
color: "yellow"
}
and so on...
}
我试过这样的reduce方法:
let langCount = langArr.reduce((lang, [name, color]) => {
lang[name] = (lang[name] || 0) + 1;
lang[color] = 'color';
return lang;
}, {});
console.log(langCount);
但我得到了这个输出:
{
python: 2
blue: "color"
c++: 2
red: "color"
java: 1
yellow: "color"
and so on...
}
【问题讨论】:
-
您尝试修改
.reduce()sn-p 以使其产生您期望的输出? -
您缺少子对象的创建,以及 reduce 代码中的一种间接方式。最值得注意的是,
count这个词永远不会出现在您的代码中,这应该使主要问题显而易见 - 如果您有地方放置它,您(可能)会拥有所需的结构。 -
@Andreas 那是我试过的,我不知道如何将它们放入单独的对象中
-
如果一种语言有不同的颜色会发生什么?
-
但是你知道如何使用解构吗?
标签: javascript arrays object ecmascript-6 reduce