查找javascript的索引"对象数组"基于对象字段值
Find index of javascript "array of objects" based on object field value
我有一个Javascript对象数组,我想找到数组元素(对象)的索引,其中特定对象的字段匹配我的搜索条件。
也就是数组看起来像
[{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
{id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}]
,我想找到元素的索引,其中元素的id字段等于,比如说,15。我使用的是angular和jquery
你必须迭代,这里有一个非常简单的例子
var index = null;
for (var i=0; i<array.length; i++) {
if ( array[i].id == 15 ) {
index = i;
break;
}
}
得到索引,如果你只想返回对象你可以做
var obj = array.filter(function(obj) {
return obj.id == 15;
}).shift();
对于ES6,您可以使用Array#findIndex
findIndex()
方法返回数组中满足所提供测试函数的第一个元素的索引。否则返回-1
。
var array = [{ id: 1, saved: 0, name: "name1" }, { id: 26, saved: 0, name: "name2" }, { id: 3, saved: 0, name: "name3" }, { id: 15, saved: 0, name: "name4" }],
index = array.findIndex(({ id }) => id === 15);
console.log(index);
.as-console-wrapper { max-height: 100% !important; top: 0; }
数组。filter是JavaScript实现这一点的更优雅的方法:
var arrr = [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
{id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}];
return arrr.filter( function( value ){ return value.id == 15; })[0];
有多种方法可以做到这一点。
你可以遍历数组并进行搜索。
var search = 15;
for(var index=0; index<input.length; index++) {
if(input[index].id == search) {
//Do whatever you want to do with this index.
}
}
或者你可以先创建一个查找
var lookup = {};
for(var index=0; index<input.length; index++) {
var element = input[index];
lookup[element.id] = element;
lookup[element.id].index = index;
}
现在,在每次后续查找一个搜索词时,您可以执行以下操作
var search = 15;
if(lookup[search]) {
var index = lookup[search].index;
}
试试这个:
$.each(json.yourrootjson, function(i, v) {
if (v.id == "15") {
alert(v.id);
alert(v.name);
alert(v.saved);
return;
}
});
这是一个非常基本的方法。当然,您不会希望像我那样静态地使用变量key
和match
,但是我也必须了解更多关于您的代码来帮助您。
var array = [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
{id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}]
var key = 'id';
var match = 15;
array.forEach(function(elem, i) {
if (elem[key] === match) {
alert(i);
}
});
有很多资源,但while循环似乎是迭代数组的最快方式。另外,在我看来,Array.map()是最干净的方法,但实际上是相当慢的。
基准关于循环的文章
var array = []; // your array
var len = array.length;
while (len-- ) {
if ( array[i].id == 15 ) {
console.log(array[i])
}
}
相关文章:
- "“;变量未引用正确的对象
- 如何创建js常量对象与"依赖/相对;价值观
- "属性描述必须是对象“”;错误
- 获取"下一个“;对象中的数值
- 得到"TypeError:对象不是函数“”;在forEach循环中使用超级测试/超级代理时
- "键“;jQuery中的对象无法正常工作
- 为什么下面抛出一个“;对象没有't支持属性或方法'importNode'"在IE11中
- "未捕获[对象对象]”;投掷和接球时
- "对象不是函数“;当将Node.js HTTP服务器对象传递给Socket.IO时
- 将对象设置为Backbone.js模型,而不必调用“;set()"在每一处房产上
- 得到"未捕获的类型错误:未定义的不是函数“;当试图从对象调用get()或set()时
- 获得错误“;对象没有方法'jScrollPane'"与AngularJS一起使用时
- "类型错误:'null'不是对象(正在评估“a.nodeType')”;在phanto
- "这个“;对象函数内部的引用
- "对象没有't支持这种性质或方法“;在IE 8中.在调试中执行精细
- "Function.createDelegate"原因;错误:对象没有't支持属性或方法
- 在javascript中,使用requireJS,我如何"要求“;typescript对象
- a href="上的javascript对象对象;javascript:"呼叫
- TypeError:undefined不是一个对象(正在评估'msg.innerHTML="Uploa
- "[对象对象]”;类型为String