迭代数组,将sum作为对象添加到该数组中(lodash)

时间:2016-01-26 22:24:49

标签: javascript arrays lodash

我试图了解如何遍历这个简单的数组。

var data =  [{"blahh":"hi","blah2":"333","third":"920","fourth":"800"}];

我想要完成的是,附加一个对象,它是某些键的总和(&#39;第三&#39;和&#39;第四&#39;)...结果数据为:< / p>

var data =  [{"blahh":"hi","blah2":"333","third":"920","fourth":"800", "sum": "1720"}];

我想象&#39; lodash&#39;图书馆能够巧妙地完成这一任务。我无法弄清楚如何解决这个问题。我知道这是一个新手问题,但也许回答它可能有助于一些灵魂更好地理解lodash。

3 个答案:

答案 0 :(得分:1)

不需要库来执行此操作......代码看起来可能比使用本机方法更复杂

data.forEach(item){
   item.sum = (+item.third || 0) + (+item.fourth  || 0);
});

答案 1 :(得分:1)

如前所述 - 你不需要为此付出代价。您正在查看map函数以迭代数组并返回一个新数组(在这种情况下是一个返回带有sum属性的对象的新数组的对象数组)并reduce以迭代所有所需的键和求和他们的价值观例如:

//If you want to treat numbers as numbers then use numbers.
//Some answers here are coercing strings with + - however this will result in NaN on non coerceable strings -ie 'hello',
//which will cause unexpected errors for you later (and typeof NaN is number)
var data =  [{"blahh":"hi","blah2":333,"third":920,"fourth":800}];

function returnNewArrayWithSums(keys, array) {
  return array.map(obj => {
    obj.sum = keys.reduce((sum, key) => typeof obj[key] === 'number' ? obj[key] + sum : sum, 0);
    return obj;
  });
}

returnNewArrayWithSums(['third', 'fourth'], data);

编辑添加 - 这个答案是给你一个用map / reduce的用例 - 理想情况下,你不必指定数字键,并使这个函数对于任何具有k / v对象的数组更通用你想要求和的数字对

答案 2 :(得分:0)

你有一个对象的数组 - 我认为你不想这样做。数组中没有键:值对(实际上它们在JavaScript中有效但忽略了它)。它们是一个索引的值列表。你可能想做这样的事情:

// notice im not putting the integer values in quotes
var data = {'blah':'hi', 'blah2':333, 'third':920, 'fourth':800 };
data.sum = data.third + data.fourth;

这将增加一笔&#39;字段到您的对象的值为第三和第四的总和。这是你想要做的吗?