2016-12-15 4 views
1
var obj = { 0:["abc", "pqr"], 1:["xyz"] }; 

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

Моя функция -

var countNumberOfElementsInArrayGivenObject = function (input: Object) { 
          let count = 0; 
          _.forEach(input, function (value, key) { 
           count += value.length 
          }); 

          return count; 
         } 

Это работает, но я ищу лучше решение с использованием функций lodash lib.

ответ

3

Вы можете использовать _.sumBy после получения значений объекта.

var obj = { a: ["abc", "pqr"], b: ["xyz"] }; 
 
var total = _(obj).values().sumBy('length'); 
 
console.log(total);
<script src="https://cdn.jsdelivr.net/lodash/4.16.3/lodash.min.js"></script>

1

использование _.flatten

var res = _.chain(obj) 
    .values() // to array of values 
    .flatten() 
    .size() 
    .value() 

ПРИМЕЧАНИЕ

это может быть дорогим для многих элементов, то лучше использовать the _.sumBy solution.

+2

Flatten будет дорогостоящим шагом для такой простой операции. – 4castle

+0

@ 4castle лучше использовать _.sumBy, вы правы! – stasovlas