try*_*sis 8 javascript arrays foreach node.js lodash
关联数组是否有forEach循环Lodash?我发现,名为 "forEach" 的函数仅适用于索引数组.例如,如果我有一个myArray包含值的数组[1, 2, 3],那么
lodash.forEach(myArray, function(index) {
console.log(index);
});
Run Code Online (Sandbox Code Playgroud)
并运行函数(in Node),我得到预期的结果:
1
2
3
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用关联数组时,它不起作用:
lodash = require('lodash');
myArray = [];
myArray['valOne'] = 1;
myArray['valTwo'] = 2;
myArray['valThree'] = 3;
lodash.forEach(myArray, function(index) {
console.log('7');
});
Run Code Online (Sandbox Code Playgroud)
正如您在运行此操作时所看到的Node,即使回调函数包含除数组元素之外的其他内容,它也不会触发.它似乎完全跳过循环.
首先,为什么会发生这种情况?第二,是否有另一个功能包括在Lodash这个问题中,或者,如果没有,有没有办法使用该forEach功能来完成这个,而不改变过程中的原始数组?
Lodash具有此功能forOwn.在第二个数组中,如果你这样做
_.forOwn(myArray, function(index) {
console.log(index);
});
Run Code Online (Sandbox Code Playgroud)
你应该得到预期的结果.
我仍然不确定为什么forEach似乎跳过第一个函数,但是我相信它可能与没有"长度"的数组有关.甲JavaScript数组的长度是它具有最高编号的索引.例如,myOtherArray定义为myOtherArray[999]="myValue"长度为1,000的数组(因为数组为零索引,意味着它们从0开始,而不是1),即使它没有其他值.这意味着没有编号索引的数组或只有负索引的数组将没有length属性.Lodash必须抓住这个并且不给数组一个length属性,可能保持一致性和性能,因此不会呈现任何输出.
myArray = [];
myArray['valOne'] = 1;
myArray['valTwo'] = 2;
myArray['valThree'] = 3;
lodash.forEach(myArray, function(index) {
console.log('7');
});
Run Code Online (Sandbox Code Playgroud)
关联数组只是一组键值对,它只是一个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);
});
Run Code Online (Sandbox Code Playgroud)
要不就
var myArray = {
valOne : 1,
valTwo : 2,
valThree : 3
};
lodash.forIn(myArray, function(value, key) {
console.log(key + " : " + value);
});
Run Code Online (Sandbox Code Playgroud)
这里有关于Object as Associative Array的更多信息