我的应用程序拥有关于一组固定国家/地区的不同类型的数据,这些数据保存在一致的订单数组中。
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]
未初始化+=
将无效。
有很多方法可以解决这个问题。
1)首先用零填充新的fruit
数组:
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的答案。
答案 0 :(得分:5)
您可以使用||=
或?=
运算符初始化数组元素:
fruit[i] ||= 0
fruit[i] += val
唯一的区别是,?=
检查null
或undefined
和||=
是否检查了任何false
值。