Mam następującą tablicę z obiektami i chciałbym podsumować wszystkie wystąpienia 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>

Jak widać, wrócę do wartości 0. Chciałbym jednak wrócić wartość wyniku 377. Jakieś sugestie, co robię źle?

Doceniam twoje odpowiedzi!

4
Anna.Klee 3 czerwiec 2018, 22:28

4 odpowiedzi

Najlepsza odpowiedź

Jest łatwy przy użyciu zwykłej 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>
14
baao 3 czerwiec 2018, 19:30

Przeczytałem odpowiedzi, ale chciałbym dodać wyjaśnienie do twojego problemu. Powód, dla którego dostajesz tablicę, jest z powodu używania .map . Jak map zwraca tablicę, a nie pojedynczy element. Co więcej, spodziewasz się uzyskać zwracaną tablicę jako zmodyfikowaną i {x2}} nie robi tego.

Co próbujesz osiągnąć, można wykonać za pomocą .reduce . Mam na myśli, dlaczego jest tam .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>
4
Muhammad Usman 3 czerwiec 2018, 19:37

Spróbuj wykonać następujące czynności:

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);
1
amrender singh 3 czerwiec 2018, 19:31

Wystarczy wziąć pojedynczy {x0}} z tablicą obiektów i klucza poszukiwanego watt za sumowanie.

Twoja próba używa obiektu zamiast tablicy dla _.sumBy. Obiekt nie jest tablicą, a wartość powrotowa wynosi zero.

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>
1
Nina Scholz 3 czerwiec 2018, 19:50