Почему функция l.sash () lodash не работает с объектами Vuejs - PullRequest
0 голосов
/ 30 сентября 2018

Я использую Vuejs и Lodash, и у меня есть вычисляемое свойство, которое просто суммирует свойство коллекции.Ранее я использовал _.sum() для этого, но когда я использую его с vuejs vm, кажется, что он просто объединяет строку [object Object]!

Я сделал jsfiddle со следующим кодом :

new Vue({
  el: "#app",
  data: {
    todos: [
      { text: "Learn JavaScript", time: 5 },
      { text: "Learn Vue", time: 10 },
      ]
  },
  computed: {
    additup() { return _.sum(this.todos, todo => todo.time ) },
    additup2() { return _.sum(this.todos, function (todo) {
      return parseInt(todo.time);
    })} },
    additup3() { 
      var t = 0; 
      _.each(this.todos, function(todo) { t+=todo.time; }); 
      return t; 
    }
  }
})

Вывод:

Метод 1 дает: [объект Object] [объект Object]
Метод 2 дает: [object Object] [объектОбъект]
Метод 3 дает: 15

Есть ли способ исправить _.sum()?Или способ исправить мое понимание того, почему это не работает; -)

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Используйте sumBy вместо sum:

Этот метод похож на _.sum за исключением того, что он принимает iteratee, который вызывается для каждого элемента в массиве для генерациизначение для суммирования.Итерируемый вызывается с одним аргументом: (значение).

0 голосов
/ 05 октября 2018

Вы установили _.sum и затем сопоставили?Потому что вы можете просто сделать:

additup() { return _.sumBy(this.todos, 'time') }

Или с ES6 вы можете стать еще короче на:

additup = () => _.sumBy(this.todos, 'time')

Это на самом деле _. SumBy основной вариант использования.

0 голосов
/ 30 сентября 2018

Попробуйте вместо этого:

additup() { return _.sum(this.todos.map(todo => todo.time)) },
...