从 ES6 中选择的数组中获取总数
Get Total From a Chosen Array in ES6
我想从 chosenData
数组中得到总数 productPrice
。我需要从 mainData
比较它,只得到它的总值。我的问题是我变得不确定,我应该怎么做,有没有更短的方法?
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newArray = chosenData.map((value, index) => ({
productPrice: mainData.find((data) => data.id === value)
}))
console.log(newArray.productPrice)
因为您的 newArray
是一组过滤后的产品。映射 returns 一个数组。可能尝试 reduce
它来计算 productPrice
总数或其他东西。但是代码在 newArray.productPrice
处是错误的
在你的方案中,通过map得到的newArray是一个数组,而array没有属性productPrice
,所以你得到undefined。
您可以筛选出匹配id的对象,然后将它们相加,例如:
mainData.filter(value=>chosenData.includes(value.id)).reduce((acc, cur)=>acc+cur.productPrice, 0)
你的newArray
是一个数组。您无法像 newArray.productPrice
那样访问它的 属性。你想从你的 newArray 计算一个值,所以你可以使用 reduce()
。构建您的代码
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newSum = chosenData.map((value, index) => ({
productPrice: mainData.find((data) => data.id === value)
})).reduce((agg,x) => {
return agg + x.productPrice.productPrice
},0);
console.log(newSum)
如果您不想让太多属性复杂化,您可以使用此代码:
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newSum = chosenData.map((value, index) => mainData.find((data) => data.id === value).productPrice).reduce((agg,x) => agg + x,0);
console.log(newSum)
map
return 是一个新数组,它不会跳过任何元素。您可以使用 reduce
并在 reduce 回调中使用 find
。如果在 maindData 中找到具有相同 id 的元素,它将 return 对象否则未定义。如果不是 undefined ,则取值累加。
const mainData = [{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newArray = chosenData.reduce((acc, curr) => {
const findById = mainData.find(item => item.id === curr);
findById && (acc += findById.productPrice)
return acc;
}, 0)
console.log(newArray)
您可以减少 mainData
并使用 O(n)
得到 totalPrice
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const totalPrice = chosenData.reduce((acc, {id, productPrice}) => {
if (chosenData.includes(id)) {
acc += productPrice;
}
return acc;
}, 0)
console.log(totalPrice)
我觉得应该是
const newArray = chosenData.map(value => mainData.find(data => data.id === value).productPrice)
console.log(newArray.productPrice)
我想从 chosenData
数组中得到总数 productPrice
。我需要从 mainData
比较它,只得到它的总值。我的问题是我变得不确定,我应该怎么做,有没有更短的方法?
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newArray = chosenData.map((value, index) => ({
productPrice: mainData.find((data) => data.id === value)
}))
console.log(newArray.productPrice)
因为您的 newArray
是一组过滤后的产品。映射 returns 一个数组。可能尝试 reduce
它来计算 productPrice
总数或其他东西。但是代码在 newArray.productPrice
在你的方案中,通过map得到的newArray是一个数组,而array没有属性productPrice
,所以你得到undefined。
您可以筛选出匹配id的对象,然后将它们相加,例如:
mainData.filter(value=>chosenData.includes(value.id)).reduce((acc, cur)=>acc+cur.productPrice, 0)
你的newArray
是一个数组。您无法像 newArray.productPrice
那样访问它的 属性。你想从你的 newArray 计算一个值,所以你可以使用 reduce()
。构建您的代码
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newSum = chosenData.map((value, index) => ({
productPrice: mainData.find((data) => data.id === value)
})).reduce((agg,x) => {
return agg + x.productPrice.productPrice
},0);
console.log(newSum)
如果您不想让太多属性复杂化,您可以使用此代码:
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newSum = chosenData.map((value, index) => mainData.find((data) => data.id === value).productPrice).reduce((agg,x) => agg + x,0);
console.log(newSum)
map
return 是一个新数组,它不会跳过任何元素。您可以使用 reduce
并在 reduce 回调中使用 find
。如果在 maindData 中找到具有相同 id 的元素,它将 return 对象否则未定义。如果不是 undefined ,则取值累加。
const mainData = [{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const newArray = chosenData.reduce((acc, curr) => {
const findById = mainData.find(item => item.id === curr);
findById && (acc += findById.productPrice)
return acc;
}, 0)
console.log(newArray)
您可以减少 mainData
并使用 O(n)
totalPrice
const mainData = [
{
"id": "4324",
"productName": "Apple",
"productPrice": 250,
},
{
"id": "656546b",
"productName": "Banana",
"productPrice": 500,
},
{
"id": "5656",
"productName": "Soup",
"productPrice": 800,
}
];
const chosenData = ['5656', '656546b']
const totalPrice = chosenData.reduce((acc, {id, productPrice}) => {
if (chosenData.includes(id)) {
acc += productPrice;
}
return acc;
}, 0)
console.log(totalPrice)
我觉得应该是
const newArray = chosenData.map(value => mainData.find(data => data.id === value).productPrice)
console.log(newArray.productPrice)