繁体   English   中英

Lodash forEach Associative Array

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM