繁体   English   中英

如何遍历包含对象对象的数组

[英]How to loop through an array containing objects of objects

这是我的阵列:

[{
    name: "Test",
    skills: {
        agile: true,
        good: true
    }
 },
 {
    name: "Test 2",
    skills: {
        agile: false,
        good: false
    }
 }]

我需要找到技能良好设置为真的最后一个元素(他的索引)。 我知道解决这个问题的唯一方法是使用for / if组合。 还有其他更快/最佳的方法吗?

使用过滤器:

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用于您lastGoodIndex的任何恶意目的。

或者,如果name不是唯一键,我建议只使用forEach

let lastGoodIndex;
myArray.forEach((x, i) => lastGoodIndex = x.skills.good ? i : lastGoodIndex);
console.log(lastGoodIndex);

最快的方法是给我们一个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)); 

或者如果列表不是那么大,你可以将reversefindIndex结合起来:

arr.reverse().findIndex(x => x.skills.good));

你可以在3行中完成:

 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); 

如果你想在index有最后一个元素的good = true你最好的选择是使用for/if (可能是倒退,也就是i--如果你能猜到你在哪里可以预期的good项目吗?)。

filter也会找到项目,它也有index属性,但通常比/ if慢。

forEach通常也比for/if慢。

编辑:造型。

由于您需要搜索最后一个值,因此您应该按降序搜索。 这可以防止任何不必要的迭代。

 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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM