对象数组中的indexOf方法?
获取包含对象的数组的索引的最佳方法是什么?
想象一下这个场景:
var hello = {
hello: 'world',
foo: 'bar'
};
var qaz = {
hello: 'stevie',
foo: 'baz'
}
var myArray = [];
myArray.push(hello,qaz);
现在我想要有一个indexOf
对象,其中hello
属性是'stevie'
,在这个例子中,它将是1
。
我是JavaScript新手,我不知道是否有一个简单的方法,或者如果我应该建立自己的功能来做到这一点。
我想你可以使用map函数在一行中解决它:
pos = myArray.map(function(e) { return e.hello; }).indexOf('stevie');
除IE以外的所有浏览器(非边缘)支持Array.prototype.findIndex。 但提供的polyfill很好。
var indexOfStevie = myArray.findIndex(i => i.hello === "stevie");
地图解决方案没问题。 但是你每次搜索迭代整个数组。 这只是findIndex最糟糕的情况,一旦找到匹配就会停止迭代。
没有一个简洁的方法(当开发人员不得不担心IE8) ,但这是一个常见的解决方案:
var searchTerm = "stevie",
index = -1;
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i].hello === searchTerm) {
index = i;
break;
}
}
或作为一个功能:
function arrayObjectIndexOf(myArray, searchTerm, property) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i][property] === searchTerm) return i;
}
return -1;
}
arrayObjectIndexOf(arr, "stevie", "hello"); // 1
只是一些说明:
例如,
var a = {obj: 0};
var b = [a];
b.indexOf({obj: 0}); // -1 not found
在ES2015中,这非常简单:
myArray.map(x => x.hello).indexOf('stevie')
或者,对于较大的阵列可能具有更好的性能:
myArray.findIndex(x => x.hello === 'stevie')
链接地址: http://www.djcxy.com/p/10131.html