每个关联arrays的Lodash
在关联数组中有一个forEach
循环在Lodash
中吗? 我发现, 称为 “forEach”的函数仅适用于索引数组。 例如,如果我有一个数组myArray
与值[1, 2, 3]
,并做
lodash.forEach(myArray, function(index) { console.log(index); });
并运行该function(在Node
),我得到了预期的结果:
1 2 3
但是,当我尝试与关联数组,这是行不通的:
lodash = require('lodash'); myArray = []; myArray['valOne'] = 1; myArray['valTwo'] = 2; myArray['valThree'] = 3; lodash.forEach(myArray, function(index) { console.log('7'); });
正如你可以在Node
看到的那样,即使它包含了除数组元素以外的东西,callback函数也不会被触发。 它似乎完全跳过循环。
首先,为什么会这样呢? 其次, Lodash
是否还有另外一个函数来处理这个问题,或者,如果没有的话,有没有办法使用forEach
函数来完成这个任务,而不需要改变stream程中的原始数组呢?
myArray = []; myArray['valOne'] = 1; myArray['valTwo'] = 2; myArray['valThree'] = 3; lodash.forEach(myArray, function(index) { console.log('7'); });
关联数组只是一组键值对,它不过是一个Javascript对象。 上面的情况 – myArray.length === 0
,你只是将属性添加到数组对象,而不是添加任何值到实际数组。
相反,像这样初始化你的myArray,然后循环使用forIn
var myArray = {}; myArray['valOne'] = 1; myArray['valTwo'] = 2; myArray['valThree'] = 3; lodash.forIn(myArray, function(value, key) { console.log(key + " : " + value); });
要不就
var myArray = { valOne : 1, valTwo : 2, valThree : 3 }; lodash.forIn(myArray, function(value, key) { console.log(key + " : " + value); });
更多关于对象作为关联数组在这里
Lodash
具有用于此目的的function。 在第二个数组中,如果你这样做
_.forOwn(myArray, function(index) { console.log(index); });
你应该得到预期的结果。
我仍然不确定为什么forEach
似乎跳过了第一个函数,但是我相信它可能与没有“长度”的数组有关。 JavaScript
数组的长度是它所具有的最高编号索引。 例如,定义为myOtherArray[999]="myValue"
的数组myOtherArray
的长度将为1,000(因为数组是零索引的,意味着它们从0开始,而不是从1开始),即使它没有其他值。 这意味着一个没有编号索引或只有负索引的数组将不具有length
属性。 Lodash
必须在这一点上采取行动,而不是给数组一个length
属性,可能会保持一致性和性能,从而不呈现任何输出。