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
只是一些注意事项:
- 不要在数组上使用 for...in 循环
- 一旦你找到你的“针”,一定要跳出循环或返回函数
- 小心对象相等
例如,
var a = {obj: 0};
var b = [a];
b.indexOf({obj: 0}); // -1 not found