【发布时间】:2021-03-03 15:46:15
【问题描述】:
我有两个对象列表:
let list1 = [{id: '1', status: 'use', comment: 'xxxx'}, {id: '2', status: 'ready', comment: 'yyyy'}, {id: '3', status: 'ready', comment: 'zzzz'}];
let list2 = [{uid: '1', elec: 60}, {uid: '2', elec: 60}, {uid: '10', elec: 60}, {uid: '3', elec: 40}];
我想要的是检索具有 elec > 50 且与 list1 的一个项目 id 相同的 uid 的 list2 对象,仅当 list1 的项目具有状态 ==“就绪”时。另外,我想将 list1 对象中的参数“comment”添加到此项。
在这个例子中,我的结果值为:{uid: '2',lect: 60, comment: 'yyyy'}。
我这样做了:
let list1Filtered = list1.filter(itemList1 => itemList1.status == 'ready');
let list2Filtered = list2.filter(itemList2 => itemList2.elec > 50);
var result;
for ( let itemList1Filtered of list1Filtered ) {
for ( let itemList2Filtered of list2Filtered ) {
if (!result && itemList1Filtered.id == itemList2Filtered.uid) {
result = itemList2Filtered;
result.comment = itemList1Filtered.comment;
}
}
}
return result;
我想知道是否有更优雅和/或更复杂的方式在 Javascript 中执行此操作。
【问题讨论】:
-
如果不止一项符合条件怎么办?
-
另外,您的
> 60表示示例中没有任何项目匹配。你需要>= 60 -
@GabrielePetrioli :应该选择第一个。我只在 if set 结果中使用了 !result 1 次。对于 60,你是对的,这是一个错字,我用
> 50修复了它。对此感到抱歉 -
您可以直接在循环中的 if 语句中执行
return result;,而不是检查!result
标签: javascript arrays typescript performance optimization