pri*_*nce 10 javascript javascript-framework underscore.js angularjs
我想使用underscore.js获取Array中给定值的索引.
这是我的情况
var array = [{'id': 1, 'name': 'xxx'},
{'id': 2, 'name': 'yyy'},
{'id': 3, 'name': 'zzz'}];
var searchValue = {'id': 1, 'name': 'xxx'};
Run Code Online (Sandbox Code Playgroud)
我使用了以下代码,
var index = _.indexOf(array, function(data) {
alert(data.toSource()); //For testing purpose
return data === searchValue;
});
Run Code Online (Sandbox Code Playgroud)
也试过这个
var index = _.indexOf(array, {id: searchValue.id});
Run Code Online (Sandbox Code Playgroud)
但它returns -1.因为它没有进入该功能.所以我没有得到那个警报信息.
我的代码出了什么问题.谁能帮我?
Kas*_*wau 15
我强烈建议你看一下洛达什.它包含了相当多的漂亮的小功能,遗憾的是缺少这些功能.
例如,这就是你用lodash做的事情:
var array = [{'id': 1, 'name': 'xxx'},
{'id': 2, 'name': 'yyy'},
{'id': 3, 'name': 'zzz'}];
var searchValue = {'id': 1, 'name': 'xxx'};
var index = _.findIndex(array, searchValue);
console.log(index === 0); //-> true
Run Code Online (Sandbox Code Playgroud)
http://lodash.com/docs#findIndex
此外,如果您必须使用Underscore - 您可以访问https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.underscore.js获取lodash的下划线构建
随着ES2015的广泛使用(通过像Babel这样的转发器),您可以放弃lodash并强调手头的任务并使用本机方法:
var arr = [{ id: 1 }, { id: 2}];
arr.findIndex(i => i.id === 1); // 0
Run Code Online (Sandbox Code Playgroud)
Min*_*hev 14
请改用:
var array = [{'id': 1, 'name': 'xxx'},
{'id': 2, 'name': 'yyy'},
{'id': 3, 'name': 'zzz'}];
var searchValue = {'id': 1, 'name': 'xxx'},
index = -1;
_.each(array, function(data, idx) {
if (_.isEqual(data, searchValue)) {
index = idx;
return;
}
});
console.log(index); //0
Run Code Online (Sandbox Code Playgroud)
在您的代码段中data === searchValue比较对象的引用,您不希望这样做.另一方面,如果您使用,data == searchValue您将比较对象的字符串表示,即[Object object]如果您没有重新定义的toString方法.
因此,比较对象的正确方法是使用_.isEqual.
| 归档时间: |
|
| 查看次数: |
49855 次 |
| 最近记录: |