这是reduce方法的默认工作方式吗



const product_list=[{id:1},{id:2}]
const temp_products=[{id:1,quantity:10},{id:2,quantity:20}]
product_list.map(prod=>{
console.log(temp_products.reduce((init,curr_prod)=>{
return curr_prod.id == prod.id ? curr_prod.quantity : null
}))
})
// null
// 20

第二个对象的条件执行为true,但对于第一个对象,它执行为false(必须为true(。

reduce函数从第二个对象中正确获取第一个对象的Quantity,返回null。为什么会这样??

reduce的一个细微之处在于,如果不提供种子值,则对函数的第一次调用将传递第一个和第二个元素。

代码的另一个问题是,您需要从reduce返回init

此外,如果您对map的结果不感兴趣,则不需要使用map,只需使用forEach

const product_list=[{id:1},{id:2}]
const temp_products=[{id:1,quantity:10},{id:2,quantity:20}]
product_list.forEach(prod=>{
console.log(temp_products.reduce((init,curr_prod)=>{
return curr_prod.id == prod.id ? curr_prod.quantity : init
},null))
})
// 10
// 20

我不知道函数map的用途是什么,可能您想使用函数forEach,因为它似乎想循环。

请记住,函数map用于将源数组的对象转换为新数组中的新结构。

同样,我认为一种可能的方法应该是函数find,它在数组中找到第一个匹配(根据条件(

const product_list = [{
id: 1
}, {
id: 2
}]
const temp_products = [{
id: 1,
quantity: 10
}, {
id: 2,
quantity: 20
}];
product_list.forEach(prod => {
let found = temp_products.find(curr_prod => {
return curr_prod.id == prod.id;
});

if (found) 
console.log(found.quantity);
});

最新更新