如何在ES6 / ES2015中初始化数组?

时间:2016-02-22 13:19:23

标签: arrays ecmascript-6

有没有办法在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

3 个答案:

答案 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来解决此问题。