[英]Lodash forEach Associative Array
在Lodash
是否存在用于关联数组的forEach
循环? 我发现, 名为 “forEach”的函数仅适用于索引数组。 例如,如果我有一个数组myArray
,其值为[1, 2, 3]
和do
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
函数来完成此任务,而无需更改进程中的原始数组?
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);
});
这里有关于Object as Associative Array的更多信息
Lodash
具有的功能forOwn
用于这一目的。 在第二个数组中,如果你这样做
_.forOwn(myArray, function(index) {
console.log(index);
});
你应该得到预期的结果。
我仍然不确定为什么forEach
似乎跳过了第一个函数,但我相信它可能与没有“长度”的数组有关。 JavaScript
数组的长度是它具有的最高编号索引。 例如,定义为myOtherArray[999]="myValue"
的数组myOtherArray
将具有1,000的长度(因为数组是零索引的,意味着它们从0开始,而不是1),即使它没有其他值。 这意味着没有编号索引的数组或只有负索引的数组将不具有length
属性。 Lodash
必须接受这个并且不给数组一个length
属性,可能保持一致性和性能,因此不会呈现任何输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.