如何遍历特定索引的对象数组

时间:2020-02-11 13:58:52

标签: javascript

我有一个test array和一个test object。我想比较test arraytest object的每个元素,但只比较test objecttest array之后的那些元素。

我通过以下示例完成了此操作。我们有任何优雅的方法来做到这一点吗?

let testArray = [{ id: xx, name: 'C' },
    { id: xy, name: 'B' },
    { id: yz, name: 'C' },
    { id: ab, name: 'D' },
    { id: bc, name: 'E' },
    { id: cd, name: 'C' },
    { id: ce, name: 'E' },
    { id: ef, name: 'C' }];

let testObj = { id: 3, name: 'C' };

for (let i = testArray.indexOf(testObj) + 1; i < testArray.length; i++) {
  if (testObj.name === testArray[i].name) {
    console.log(testArray[i].id); // expected - object with id : cd and ef
    // if I change test object to { id: cd, name: 'C' } then answer should be object with id : ef
  }
}

3 个答案:

答案 0 :(得分:1)

您可以这样:

testArray.filter(i => i.id > testObj.id).forEach(i => console.log(i))

只需一行过滤器,并显示所有已过滤的项目。

答案 1 :(得分:0)

以下解决方案将在遇到<LangVersion>latest</LangVersion>的位置查找索引,然后从该位置循环遍历目标数组。

优雅的方式是高度主观的思想。我们都会为您提供替代语法。应用最适合您的需求并与您的常规编码样式相匹配的一种。

id

答案 2 :(得分:0)

使用.findIndex()在数组中找到正确的对象。

使用slice(index+1)仅捕获该对象之后的项目。

最后,.filter()获得具有匹配的name值的对象。

let testArray = [{ id: 1, name: 'C' },{ id: 2, name: 'B' },{ id: 3, name: 'C' },{ id: 4, name: 'D' },{ id: 5, name: 'E' },{ id: 6, name: 'C' },{ id: 7, name: 'E' },{ id: 8, name: 'C' }];
let testObj = { id: 3, name: 'C' };

const getItemsAfterObj = (arr, obj) => {
  const idx = arr.findIndex(o => o.id === obj.id && o.name === obj.name);
  if (idx === -1) throw "Object not found in array.";
  return arr.slice(idx+1).filter(o => o.name === obj.name);
};

const items = getItemsAfterObj(testArray,testObj);
console.log(items);