Суммируйте массив с объектами - PullRequest
0 голосов
/ 03 июня 2018

У меня есть следующий массив с объектами, и я хотел бы суммировать все вхождения watt:

let allProducts = [{
    "unique_id": "102",
    "currency": "$",
    "price": "529.99",
    "watt": 150
  },
  {
    "unique_id": "11",
    "currency": "$",
    "price": "323",
    "watt": 150
  },
  {
    "unique_id": "13",
    "currency": "$",
    "price": "23",
    "watt": 77
  }
]

let getWatt =
  _(allProducts)
  .map((objs, key) => ({
    'watt': _.sumBy(objs, 'watt')
  }))
  .value()

console.log(getWatt)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

Как видите, я получаю массив значений 0.Тем не менее, я хотел бы вернуть значение результата 377.Любые предложения, что я делаю не так?

Я ценю ваши ответы!

Ответы [ 4 ]

0 голосов
/ 03 июня 2018

Я прочитал ответы, но я хотел бы добавить объяснение вашей проблемы.Причиной получения массива является использование .map.Поскольку map возвращает вам массив, а не один элемент.Более того, вы ожидаете получить возвращенный массив как измененный, а map этого не делает.

То, чего вы пытаетесь достичь, можно сделать с помощью .reduce.Я имею в виду, поэтому .reduce есть

let allProducts = [{
    "unique_id": "102",
    "currency": "$",
    "price": "529.99",
    "watt": 150
  },
  {
    "unique_id": "11",
    "currency": "$",
    "price": "323",
    "watt": 150
  },
  {
    "unique_id": "13",
    "currency": "$",
    "price": "23",
    "watt": 77
  }
];
var getWatt = allProducts.reduce((acc,curr)=> acc + curr.watt,0);
console.log(getWatt);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
0 голосов
/ 03 июня 2018

Легко использовать обычный js

const sum = allProducts.reduce((a, {watt}) => a + watt, 0);
console.log(sum);
<script>
let allProducts = [{
    "unique_id": "102",
    "currency": "$",
    "price": "529.99",
    "watt": 150
  },
  {
    "unique_id": "11",
    "currency": "$",
    "price": "323",
    "watt": 150
  },
  {
    "unique_id": "13",
    "currency": "$",
    "price": "23",
    "watt": 77
  }
]


</script>
0 голосов
/ 03 июня 2018

Попробуйте следующее:

let allProducts = [{
    "unique_id": "102",
    "currency": "$",
    "price": "529.99",
    "watt": 150
  },
  {
    "unique_id": "11",
    "currency": "$",
    "price": "323",
    "watt": 150
  },
  {
    "unique_id": "13",
    "currency": "$",
    "price": "23",
    "watt": 77
  }
];

var sum = allProducts.reduce((sum,a)=>{
  return sum + a.watt;
},0);
console.log(sum);
0 голосов
/ 03 июня 2018

Просто возьмите один _.sumBy с массивом объектов и требуемым ключом watt для суммирования.

Ваша попытка использует объект вместо массива для _.sumBy.Объект не является массивом, а возвращаемое значение равно нулю.

var allProducts = [{ unique_id: "102", currency: "$", price: "529.99", watt: 150 }, { unique_id: "11", currency: "$", price: "323", watt: 150 }, { unique_id: "13", currency: "$", price: "23", watt: 77 }],
    getWatt = _.sumBy(allProducts, 'watt');

console.log(getWatt)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
...