这是我的阵列:
[{
name: "Test",
skills: {
agile: true,
good: true
}
},
{
name: "Test 2",
skills: {
agile: false,
good: false
}
}]
我需要找到技能设置为true的最后一个元素(他的索引)。我知道解决这个问题的唯一方法是使用for / if组合。还有其他更快/最佳的方法吗?
答案 0 :(得分:2)
使用过滤器:
const goodSkills = myArray.filter(x => x.skills.good)
然后得到最后一项:
goodSkills[goodSkills.length - 1]
或者如果您只需要索引,我们会将name
视为唯一键:
const lastGoodIndex = myArray.findIndex(x => x.name === goodSkills[goodSkills.length - 1].name)
然后,您可以将lastGoodIndex
用于您想要的任何恶意目的。
或者,如果name
不是唯一键,我建议您使用forEach
:
let lastGoodIndex;
myArray.forEach((x, i) => lastGoodIndex = x.skills.good ? i : lastGoodIndex);
console.log(lastGoodIndex);
答案 1 :(得分:1)
最快的方法是给我们一个for循环:
var arr = [{
name: "Test",
skills: {
agile: true,
good: true
}
},
{
name: "Test 2",
skills: {
agile: false,
good: false
},
}]
function findLastGoodIndex(arr) {
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i].skills.good) {
return i;
}
}
}
console.log(findLastGoodIndex(arr));
如果列表不是很大,您可以将reverse
与findIndex
合并:
arr.reverse().findIndex(x => x.skills.good));
答案 2 :(得分:0)
你可以分三行进行:
var arr = [
{
name: "Test",
skills: {
agile: true,
good: true
}
},
{
name: "Test 2",
skills: {
agile: false,
good: false
},
}
]
var lastIndex;
arr.forEach(function(item, i) {
if(item.skills.good) lastIndex = i;
})
console.log(lastIndex);

答案 3 :(得分:0)
如果你想要index
最后一个元素good = true
的最佳选择是使用for/if
(可能会倒退,即i--
,如果你能猜到哪里可以你期望good
项?)。
filter
也会找到项目,它也有index
属性,但通常比/ if慢。
forEach
通常也会慢于for/if
。
编辑:造型
答案 4 :(得分:0)
由于您需要搜索最后一个值,因此您应该按降序搜索。这样可以防止任何不必要的迭代。
var data = [{
name: "Test",
skills: {
agile: true,
good: true
}
},
{
name: "Test 2",
skills: {
agile: false,
good: false
}
}
];
var i = data.length;
var result = null;
while (i--) {
if (data[i].skills.good) {
result = i;
break;
}
}
console.log(result);