我需要获取expectedOutput
数组,该数组由数量更大的对象组成。预先感谢。
let arr1 = [{name: 'Almendras', amount: 0},{name: 'Nueces', amount: 0}, {name: 'Chocolate', amount: 0}];
let arr2 = [{name: 'Almendras', amount: 2}];
let expectedOutput = [{name: 'Almendras', amount: 2}, {name: 'Nueces', amount: 0}, {name: 'Chocolate', amount: 0}];
我通过这种方式尝试过
console.log(arr2.filter(x => x.amount > arr1[x].amount));
答案 0 :(得分:3)
由于您给出的示例在两个数组中使用了相同的索引,因此可以在第一个数组中进行映射,并对第二个数组进行索引比较,然后返回一个或另一个:
var res = arr1.map((v, index) => v.amount > arr2[index].amount ? v : arr2[index]);
如果任一数组都可以大于另一个数组,则可以找到较大的数组,将其循环并与较小的数组进行比较,然后将对象添加到新数组中,直到到达末尾为止,然后从中添加其余对象较大的数组。
答案 1 :(得分:1)
您可以使用Array#map
,后者将索引作为回调的第二个参数,并使用三元运算符比较两个数组中索引处的元素。
let arr1 = [{name: 'Almendras', amount: 0},{name: 'Nueces', amount: 0}, {name: 'Chocolate', amount: 0}];
let arr2 = [{name: 'Almendras', amount: 2}, {name: 'Nueces', amount: 0}, {name: 'Chocolate', amount: 1}];
let res = arr1.map((curr,idx)=>curr.amount > arr2[idx].amount?curr:arr2[idx]);
console.log(res);
答案 2 :(得分:1)
如果您知道两个数组都是根据内部对象name
键排序的,那么比较索引的其他答案可能是最好的方法。但是,如果您知道这些数组可能未排序,那么这是一个潜在的解决方案。
注意::如果要处理大小不同的数组,则必须过滤或遍历两个数组。
let arr1 = [{name: 'Almendras', amount: 0}, {name: 'Nueces', amount: 0}, {name: 'Chocolate', amount: 0}];
let arr2 = [{name: 'Almendras', amount: 2}, {name: 'Chocolate', amount: 1}, {name: 'Nueces', amount: 0}];
let expectedOutput = [{name: 'Almendras', amount: 2}, {name: 'Nueces', amount: 0}, {name: 'Chocolate', amount: 1}];
let actualOutput = arr1.map((ele1) => {
let ele2 = arr2.find((e) => e.name === ele1.name);
if(ele2) {
if(ele2.amount >= ele1.amount) {
return ele2;
}
}
return ele1;
});
console.log("actual: ", actualOutput);
console.log("expected: ", expectedOutput);