有没有办法在ES6中跳过数组初始化?我必须在R下面枚举两次,首先初始化计数器,然后进行A元素的实际计数。我宁愿做一个枚举
var A = ['red',1,'blue','red',1]; // test data
var R = []; //associative array keeping count of A values
A.map((item)=> R[item]=0); //initialize R with A elements as R indexes
A.map((item)=> R[item]++); //count repeated A elelemnts in R
答案 0 :(得分:3)
有很多方法可以采用不同的方法...这是一个:
R = A.reduce(function (R, item) {
R[item] = (R[item] || 0) + 1;
return R;
}, {});
答案 1 :(得分:2)
您不需要初始化,您可以执行以下操作:
A.forEach((val) => {
if (R[val]) {
R[val] += 1
} else {
R[val] = 1
}
});
答案 2 :(得分:2)
有没有办法在ES6中跳过数组初始化?
不,没有。您始终需要在javascript中声明并初始化变量。 es 和 esnext (outside from strict-mode you can skip the declaration, but isn't a good practice)之间没有区别。
我不明白你要做什么...... 您似乎正在计算集合中给定元素的每个实例。
如果你想这样做,你应该使用关联数组而不是索引数组:
var collection = [1, 2, 3, 4, 'me', 'you', 'she', 'me', 'you', 1];
var count = {};
collection.forEach(item => (count[item] = 1 + (count[item] || 0)));
你应该记住,关联数组是按字符串索引的,因此,你的集合中不能有“复杂类型”(例如:数组),我认为,数字转换为字符串。 在ES6 中,您应该使用Map
来解决此问题。