将JavaScript数组中的对象合并到对象

将JavaScript数组中的对象合并到对象,javascript,jquery,backbone.js,knockout.js,underscore.js,Javascript,Jquery,Backbone.js,Knockout.js,Underscore.js,我试图从一组对象中创建一个JavaScript对象 对象中的某些值保持不变,而数值或浮点值需要求和以形成新的单个对象 如何做到这一点 [{ 'visit_date': '2013-02-02', 'house_number': '22', 'price': 12.98, 'count_value': 21.554, 'variance': -23.434343434 }, { 'visit_date': '2013-02-02', 'hou

我试图从一组对象中创建一个JavaScript对象

对象中的某些值保持不变,而数值或浮点值需要求和以形成新的单个对象

如何做到这一点

[{
    'visit_date': '2013-02-02',
    'house_number': '22',
    'price': 12.98,
    'count_value': 21.554,
    'variance': -23.434343434
},
{
    'visit_date': '2013-02-02',
    'house_number': '22',
    'price': 34.78,
    'count_value': 1.34,
    'variance': -23.434343434
},
{
    'visit_date': '2013-02-02',
    'house_number': '22',
    'price': 61.41,
    'count_value':1.94,
    'variance': -12.977677874
}]

循环遍历数组,在每个对象上使用for-in循环,对于typeof-value==number的条目,求和。当它们不是数字时,你可能会做一些有用的事情,但你没有说什么-

抱歉,错过了jQuery标记。使用jQuery的以下各项可以缩短:

如果给它一个数组,则每个元素都将遍历数组元素;如果给它一个非数组对象,则每个元素都将遍历对象的属性。在上面的例子中,外部的each循环通过数组,内部的each循环通过每个对象的属性

此行上的in运算符:

dest[key] = key in dest ? dest[key] + value : value;
…告诉我们dest是否已经有一个具有该名称的键:如果有,我们将向其添加值。如果不是,我们将使用该值为该键创建一个新属性

原始非jQuery:

大致:


循环遍历数组,在每个对象上使用for-in循环,对于typeof-value==number的条目,求和。当它们不是数字时,你可能会做一些有用的事情,但你没有说什么-

抱歉,错过了jQuery标记。使用jQuery的以下各项可以缩短:

如果给它一个数组,则每个元素都将遍历数组元素;如果给它一个非数组对象,则每个元素都将遍历对象的属性。在上面的例子中,外部的each循环通过数组,内部的each循环通过每个对象的属性

此行上的in运算符:

dest[key] = key in dest ? dest[key] + value : value;
…告诉我们dest是否已经有一个具有该名称的键:如果有,我们将向其添加值。如果不是,我们将使用该值为该键创建一个新属性

原始非jQuery:

大致:

您可以使用该函数来实现它

var result = a.reduce(function (acc, c) {
    acc.visit_date = c.visit_date;
    acc.house_number = c.house_number;
    acc.price += c.price;
    acc.count_value += c.count_value;
    acc.variance += c.variance;
    return acc;
}, {
    'visit_date': '',
    'house_number': '',
    'price': 0,
    'count_value': 0,
    'variance': 0
});
结果将是

{
    visit_date: "2013-02-02",
    house_number: "22",
    price: 109.17,
    count_value: 24.834,
    variance: -59.846364742
}
您可以使用该函数来实现它

var result = a.reduce(function (acc, c) {
    acc.visit_date = c.visit_date;
    acc.house_number = c.house_number;
    acc.price += c.price;
    acc.count_value += c.count_value;
    acc.variance += c.variance;
    return acc;
}, {
    'visit_date': '',
    'house_number': '',
    'price': 0,
    'count_value': 0,
    'variance': 0
});
结果将是

{
    visit_date: "2013-02-02",
    house_number: "22",
    price: 109.17,
    count_value: 24.834,
    variance: -59.846364742
}

也许是这样的


只需遍历整个数组,然后遍历数组中对象的属性。如果属性是number,则将它们添加在一起,否则只需将属性指定给新对象。

可能是这样的吗


只需遍历整个数组,然后遍历数组中对象的属性。如果属性为数字,则将它们添加在一起,否则只需将属性指定给新对象。

当它们不是数字类型时。。只需指定不同的值。。我还是不明白你在解决问题。。你能再解释一下吗。。欢迎加入:@kengimel:JavaScript只有一种数字类型:数字所有数字都是IEEE-754双精度浮点,即使是您视为整数的数字。@sza:一点也不,而且比从预先初始化的对象开始更通用。reduce只是在幕后做同样的事情。我并不是说reduce不是另一个好的选择,在支持ES5的发动机上或带有垫片的发动机上。当它们不是数字类型时。。只需指定不同的值。。我还是不明白你在解决问题。。你能再解释一下吗。。欢迎加入:@kengimel:JavaScript只有一种数字类型:数字所有数字都是IEEE-754双精度浮点,即使是您视为整数的数字。@sza:一点也不,而且比从预先初始化的对象开始更通用。reduce只是在幕后做同样的事情。我并不是说reduce不是另一个好的选择,无论是在支持ES5的引擎上还是使用垫片。虽然使用reduce可能是最好的方法,但他可能必须自己实现它,或者使用一个库(如果必须与旧浏览器兼容的话)。它在JavaScript 1.8中可用,真正的浏览器应该支持它是的,而且真的,谁在乎谁使用的浏览器不是?显然,它们应该升级。他们自己该死的过错,真的。我只是说,提到一个垫片是免费的。虽然使用reduce可能是最好的方法,但他可能必须自己实现它,或者使用一个库,如果这必须与旧浏览器兼容的话。它在JavaScript 1.8中可用,真正的浏览器应该支持它是的,而且真的,谁在乎谁使用的浏览器不是?显然,它们应该升级。他们自己该死的过错,真的。我只是说,提到垫片是免费的。