作者:天王2502871933 | 来源:互联网 | 2023-02-05 08:11
例如,一个名为arrayElements的类型为array的变量包含:[{id:1,value:5},{id:2,value:6},{id:3,value:7},{id:4,val
例如,一个名为arrayElements的类型为array的变量包含:
[{id:1,value:5},{id:2,value:6},{id:3,value:7},{id:4,value:8}].
除了使用循环之外,如何在arrayElements变量中获取id === 3(第3个元素)的数组元素的位置?
谢谢.
解决方法:
你必须循环一点.但你可以抽象它看起来像你没有循环
function indexOfCallback(arr, callback, startIndex) {
if (typeof startIndex == 'undefined') {
startIndex = 0;
}
for(var i=startIndex; i if (callback(arr[i])) {
return i;
}
}
return -1;
}
var array = [{id:1, value:5},{id:2, value:6},{id:3, value:7},{id:4, value:8}];
// Search on id === 3
console.log(indexOfCallback(array, function(obj){
return obj.id === 3;
}));
// Search on value === 6
console.log(indexOfCallback(array, function(obj){
return obj.value === 6;
}));
正如安东尼所提到的,这是针对ECMAScript 6提出的.这是更完整的polyfill https://developer.mozilla.org/en-US/docs/Web/Javascript/Reference/Global_Objects/Array/findIndex
if (!Array.prototype.findIndex) {
Array.prototype.findIndex = function(predicate) {
if (this == null) {
throw new TypeError('Array.prototype.find called on null or undefined');
}
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return i;
}
}
return -1;
};
}
console.log(array.findIndex(function(obj){
return obj.id === 3;
}));