forEach
中是否存在关联数组的Lodash
循环?我发现,函数名为" forEach"仅适用于索引数组。例如,如果我有一个值为myArray
的数组[1, 2, 3]
,并且执行
lodash.forEach(myArray, function(index) {
console.log(index);
});
并运行该函数(在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
中运行此操作所看到的,即使回调函数包含除数组元素之外的其他内容,它也不会触发。它似乎完全跳过循环。
首先,为什么会发生这种情况?第二,Lodash
中是否包含另一个函数用于此问题,或者,如果没有,是否有办法使用forEach
函数来完成此操作,而不更改过程中的原始数组?
答案 0 :(得分:6)
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);
});
有关对象作为关联数组的更多信息here
答案 1 :(得分:5)
Lodash
具有forOwn
函数。在第二个数组中,如果你这样做
_.forOwn(myArray, function(index) {
console.log(index);
});
你应该得到预期的结果。
我仍然不确定为什么forEach
似乎跳过了第一个函数,但我相信它可能与数组没有"长度"有关。 JavaScript
数组的长度是它具有的最高编号索引。例如,定义为myOtherArray
的数组myOtherArray[999]="myValue"
的长度为1,000(因为数组是零索引的,这意味着它们从0开始,而不是1),即使它没有其他值。这意味着没有编号索引或只有负索引的数组将不具有length
属性。 Lodash
必须接受这个并且不给数组一个length
属性,这可能会保持一致性和性能,从而不会呈现任何输出。