我有一个test array
和一个test object
。我想比较test array
和test object
的每个元素,但只比较test object
中test 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
}
}
答案 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);