Array.prototype.findIndex 在除 IE(非边缘)以外的所有浏览器中都受支持。但提供的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