2

我的应用程序有关于一组固定国家的不同类型的数据,以一致的顺序保存在数组中。

data = 
  oranges: [1,2,3]
  apples: [1,2,3]
  cabbages: [1,2,3]

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

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

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

有多种解决方法。

fruit1)首先用零填充新数组:

for i in [0..len]
  fruit[i] = 0

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

if fruit[i]?
  fruit[i] += val 
else 
  fruit[i] = val

这些看起来都不优雅。我尝试将方法 2) 提取到一个函数中,但我不得不承认我无法完全理解它。我考虑过传入fruit,将其克隆(使用arr.slice(0)),然后设置fruit为输出,但每次迭代都这样做感觉不对。

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

4

1 回答 1

6

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

fruit[i] ||= 0
fruit[i] += val

唯一的区别是?=检查null或检查任何值。undefined||=false

于 2013-08-22T07:47:30.453 回答