仅推入数组中的一种类型的项目

时间:2019-10-31 20:53:45

标签: javascript arrays

我希望能够从我的阵列中提取在一个特定位置购买的商品的价值。我希望能够提取值并将其放入一个单独的数组中,例如在下面发布的数组中,我希望仅获取食品类型食品的价格并将其推入一个单独的数组中,我这样做吗?

const array = [
    { Type: "Food", Price: "100" },
    { Type: "Entertainment", Price: "200" },
    { Type: "Food", Price: "80" },
    { Type: "Entertainment", Price: "150" }
];

是否有更简单的方法来获取食品类型的总价格?

4 个答案:

答案 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" }