我希望能够从我的阵列中提取在一个特定位置购买的商品的价值。我希望能够提取值并将其放入一个单独的数组中,例如在下面发布的数组中,我希望仅获取食品类型食品的价格并将其推入一个单独的数组中,我这样做吗?
const array = [
{ Type: "Food", Price: "100" },
{ Type: "Entertainment", Price: "200" },
{ Type: "Food", Price: "80" },
{ Type: "Entertainment", Price: "150" }
];
是否有更简单的方法来获取食品类型的总价格?
答案 0 :(得分:2)
您将希望减少数据的总和。如果它们的键等于“食物”,则只会添加到总和(运行总额)。
您从零开始,然后为每个键为“食物”的商品添加解析后的整数(因为您不关心小数)。
编辑:减速器的逻辑如下:
const { state } = navigation;
TOTAL + (DOES_KEY_MATCH? YES=PARSED_VALUE / NO=ZERO);
如果要处理浮点值...
您可以使用const array = [
{ Type: "Food", Price: "100" },
{ Type: "Entertainment", Price: "200" },
{ Type: "Food", Price: "80" },
{ Type: "Entertainment", Price: "150" }
];
/**
* Returns the sum of targeted values that match the key.
* @param data {object[]} - An array of objects.
* @param key {string} - The value of the key that you want to match.
* @param options.keyField [key] {string} - The key field to match against.
* @param options.valueField [value] {string} - The value of the matching item.
* @return Returns the sum of all items' values that match the desired key.
*/
function calculateTotal(data, key, options) {
let opts = Object.assign({ keyField: 'key', valueField: 'value' }, options || {});
return data.reduce((sum, item) => {
return sum + (item[opts.keyField] === key ? parseInt(item[opts.valueField], 10) : 0);
}, 0);
}
console.log('Total cost of Food: $' + calculateTotal(array, 'Food', {
keyField: 'Type',
valueField: 'Price'
}));
代替parseFloat
,并用parseInt
格式化数字。
toFixed(2)
答案 1 :(得分:1)
使用forEach()对数组进行迭代并添加给定type
的价格以获得总计。
使用Number()将价格从字符串转换为数字。即使价格有小数,这也有效。
const array = [ { Type: "Food", Price: "100" }, { Type: "Entertainment", Price: "200" }, { Type: "Food", Price: "80" }, { Type: "Entertainment", Price: "150" } ];
function getTotalPrice(array, type) {
let total = 0;
array.forEach(item => {
if (item.Type === type) {
total += Number(item.Price);
}
});
return total;
}
console.log(getTotalPrice(array, "Food"));
或使用reduce()。
const array = [ { Type: "Food", Price: "100" }, { Type: "Entertainment", Price: "200" }, { Type: "Food", Price: "80" }, { Type: "Entertainment", Price: "150" } ];
function getTotalPrice(array, type) {
return array.reduce((total, item) => {
if (item.Type === type) {
total += Number(item.Price);
}
return total;
}, 0);
return total;
}
console.log(getTotalPrice(array, "Food"));
答案 2 :(得分:0)
您必须首先使用要操作的类型过滤数组。这将为您提供一个只有所需类型的新数组,然后您可以对每个商品的价格求和。
foodArray = array.filter(a => a.Type === "Food");
var totalPrice = 0;
foodArray.forEach(food => totalPrice = totalPrice + food.Price);
请注意,如果“ Price”是一个字符串,则应首先将其转换为数字。如果不这样做,最终将所有价格串联起来,而不是总和。
答案 3 :(得分:0)
您可以使用javascript函数filter()
,并使用与该类型配合使用的函数作为回调。
const array = [
{ Type: "Food", Price: "100" },
{ Type: "Entertainment", Price: "200" },
{ Type: "Food", Price: "80" },
{ Type: "Entertainment", Price: "150" }
];
let type = 'Food';
var found = array.find(findType(type));
function findType(type) {
return (item) => item.Type === type;
}
console.log(found);
// Object { Type: "Food", Price: "100" }