CoffeeScript:初始化或增加数组中的值

Der*_*ill 2 javascript coffeescript

我的应用程序具有关于一组固定国家/地区的不同类型的数据,这些数据保持在一致顺序的数组中.

data = 
  oranges: [1,2,3]
  apples: [1,2,3]
  cabbages: [1,2,3]
Run Code Online (Sandbox Code Playgroud)

这些数组通过各种标准组合成新数组,我发现自己想要编写这样的代码:

fruit = []
for key, arr of data                  # For each array
  if key in ['oranges', 'apples']     # It it meets certain criteria
    for val, i in arr                 # Use the values in the creation of a new array
      fruit[i] += val
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为如果fruit[i]未初始化+=将不起作用.

有很多方法可以解决这个问题.

1)fruit首先用零填充新数组:

for i in [0..len]
  fruit[i] = 0
Run Code Online (Sandbox Code Playgroud)

2)检查是否fruit[i]存在:

if fruit[i]?
  fruit[i] += val 
else 
  fruit[i] = val
Run Code Online (Sandbox Code Playgroud)

这些似乎都不优雅.我尝试将方法2)提取到一个函数中,但我不得不承认我不能完全理解它.我考虑过传入fruit,克隆它(带arr.slice(0))然后设置fruit为输出,但是在每次迭代时都不适合这样做.

数据格式是固定的,但除此之外我的问题是"处理这个问题的最佳方法是什么?" 我愿意接受使用CoffeeScript和/或ECMAScript 5和/或JQuery的答案.

Leo*_*tny 6

您可以使用||=?=运算符初始化数组的元素:

fruit[i] ||= 0
fruit[i] += val
Run Code Online (Sandbox Code Playgroud)

唯一的区别是,?=用于检查nullundefined||=检查任何false的值.

  • `fruit [i] =(fruit [i]或0)+ val`也是一个单行选择:) (9认同)