下面的代码将返回对象的第一个索引,其id =" 1"如何找到id =" 1"的对象的最后一个索引。这是2?当然我可以使用循环但不使用循环是可能的吗?
var array = [{id: "1"}, {id: "2"}, {id: "1"}];
var index = array.findIndex(function(oItem) {
return oItem.id === "1";
});
答案 0 :(得分:3)
您可以map()
将数组排列为ID数组,然后使用lastIndexOf
var array = [{id: "1"}, {id: "2"}, {id: "1"}];
var lastIndex = array.map(e => e.id).lastIndexOf('1')
console.log(lastIndex)
由于目前没有findLastIndex
方法,并且您不想使用循环,您可以使用递归创建自己的函数,您可以将匿名函数作为参数传递给搜索。
var array = [{id: "1"}, {id: "2"}, {id: "1"}];
function findLastIndex(data, func) {
var start = data.length - 1;
var result = null;
function search(data, i, func) {
if (i < 0) return;
var check = func(data[i]);
if (check == true) {
result = i;
return;
}
search(data, i -= 1, func)
}
search(data, start, func)
return result;
}
var lastIndex = findLastIndex(array, function(e) {
return e.id == 1;
})
console.log(lastIndex)
答案 1 :(得分:1)
您可以使用Array#map
并声明新的index
变量,该变量将被覆盖,直到它到达给定id
的最后一个元素。
var array = [{id: "1"}, {id: "2"}, {id: "1"}],
index;
arr = array.map((v,i) => v.id == 1 ? index = i : null);
console.log(index);
答案 2 :(得分:0)
使用Array map()方法:
尝试此操作
var myarray = [{id: "1"}, {id: "2"}, {id: "1"}];
var res = myarray.map(function(item) {
return item.id;
});
console.log(res.lastIndexOf("1"));
答案 3 :(得分:-1)
如果你不介意使用lodash,它有findLastIndex
。
如果有的话,您可以查看the source of it的想法。