通过Underscore的each方法获取数组的键和值

4
我想循环遍历一个数组并获取其键和值。这是我的代码,但我没有得到任何输出。我做错了什么?
let regexes = [];
regexes['some.thing'] = /([^.]+)[.\s]*/g;

_.each(regexes, function(regex, key) {
    console.log(regex, key);
});

在Javascript中,数组具有数字索引。如果你想迭代一个对象,你可以使用原生的方法:for(var key in yourObjectOrArrayLike){console.log(key + ' - ' + yourObjectOrArrayLike[key]);} - José M. Carnero
3个回答

1

_.each 遍历数组的索引。您正在向数组对象添加一个非数字属性。您的数组是空的,_.each 回调没有执行。看起来您想使用普通对象 ({}) 而不是数组:

let regexes = {};

现在_.each应该通过使用hasOwnProperty方法来迭代对象的自有属性。

1

你正在使用数组并添加一个无效的属性。请使用对象。

let regexes = {};
regexes['some.thing'] = /([^.]+)[.\s]*/g;

_.each(regexes, function(regex, key) {
    console.log(regex, key);
});

1
在这种方式下,向数组添加属性是完全有效的。然而,在这种情况下,它并没有达到预期的结果。 :-) - sdgluck
是的,我知道,但它不被推荐使用,而且几乎没有什么用处。 - Piyush.kapoor

0

您正在为数组分配属性。 Lodash 正试图遍历数组的数字索引,但是没有数字索引。将数组更改为对象,Lodash 将遍历其可枚举属性:

let regexes = {};
regexes['some.thing'] = /([^.]+)[.\s]*/g;

_.forEach(regexes, function(regex, key) {
    console.log(regex, key);
});

或者,如果必须使用数组,则只需将值推送到它上面:

let regexes = [];
regexes.push(/([^.]+)[.\s]*/g);

_.forEach(regexes, function(regex, i) {
    console.log(regex, i);
});

1
.each已被弃用,建议使用.forEach。请参见https://lodash.com/docs/4.17.4#forEach。 - Sandokan El Cojo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接