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

Javascript 迭代数组,将总和作为对象添加到该数组中(lodash),javascript,arrays,lodash,Javascript,Arrays,Lodash,我试图理解如何遍历这个简单数组 var data = [{"blahh":"hi","blah2":"333","third":"920","fourth":"800"}]; 我试图完成的是,添加一个对象,该对象是某些键的总和(“第三个”和“第四个”)…结果数据如下: var data = [{"blahh":"hi","blah2":"333","third":"920","fourth":"800", "sum": "1720"}]; 我认为“洛达斯”图书馆能够巧妙地完成这一任务。我

我试图理解如何遍历这个简单数组

var data =  [{"blahh":"hi","blah2":"333","third":"920","fourth":"800"}];
我试图完成的是,添加一个对象,该对象是某些键的总和(“第三个”和“第四个”)…结果数据如下:

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

我认为“洛达斯”图书馆能够巧妙地完成这一任务。我就是不知道该怎么办。我知道这是一个新手问题,但也许回答它可以帮助一些灵魂更好地理解洛达斯

你有一个由一个对象组成的数组——我想你不会这么做的。数组中没有键:值对(实际上它们在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;

这将向对象添加一个值为第三和第四总和的“总和”字段。这就是你想要做的吗?

不需要图书馆来做这件事。。。代码看起来可能比使用本机方法更复杂

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

如前所述,您不需要使用lodash。您看到的是map函数,它迭代一个数组并返回一个新数组(在本例中,是一个对象数组,它返回一个新数组,其中包含具有sum属性的对象),并简化为迭代所有所需的键并对其值求和。例如:

//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的用例-理想情况下,您不必指定数字键,并使此函数更通用于任何具有要求和的NUM的k/v对对象的数组

除非您了解如何在没有lodash的情况下使用lodash。垃圾。您可以学习如何使用库执行某些操作,然后了解如何以本机方式执行。因此,您的问题是如何迭代和数组,以及如何向对象添加属性?这些问题以前已经回答过,请使用搜索。谢谢大家的评论,但我认为这里有一个误解。我知道没有“lodash”也可以做到,我提出这个问题是因为我特别想看看是否可以使用lodash“整洁地”做到。