我遇到了一个问题,我希望您在Stack Overflow上的JavaScript人员可以帮助我解决这个问题。
给出以下数组:
var array1 = [{address: "www.example.com", hits: 1}, {address: "www.anotherone.org", hits: 10}]
var array2 = [{address: "www.example.com", buttons: 1}, {address: "www.yetanotherone.info", buttons: 2}]
var array3 = [{address: "www.example.com", cons: 1}, {address: "andevenonemore.com", cons: 1}]
我想通过地址键合并这些数组,这在所有数组中都很常见但值可能不同。如果地址值不在数组中,则默认值为0。 因此,结果数组应如下所示:
var resultArray = [{
address: "www.example.com",
hits: 1,
buttons: 1,
cons: 1
}, {
address: "www.anotherone.org",
hits: 1,
buttons: 0,
cons: 0
}, {
address: "www.yetanotherone.info",
hits: 0,
buttons: 2,
cons: 0
}, {
address: "andevenonemore.com",
hits: 0,
buttons: 0,
cons: 1
}]
合并将在服务器上进行,我可以使用Underscore.js。
我真的希望,比我聪明的人可以给我一个有效的方法来解决这个问题。真的很感谢你的帮助!
答案 0 :(得分:1)
在普通的Javascript中,您可以使用哈希表来引用单个地址项并计算所需的值。
function zooms(zoomType) {
switch(zoomType) {
case '+':
newW += 10;
break;
case '-':
newW -= 10;
break
}
if(newW <= 0) {
newW = 0;
} else {
if(newW >= 100) {
newW = 100;
}
}
return newW;
}
function backgroundAdjust(num, el) {
wid = (parseInt(num)+parseInt(el.width()));
el.css({
'background-size': wid + 'px auto'
});
return;
}
$('input.zoomButton').click(function() {
zoomType = $(this).val();
zoomNum = zooms(zoomType);
backgroundAdjust(zoomNum, $('#uploadImage'));
});
答案 1 :(得分:1)
我知道已经有一个已接受的答案,但这里有一个使用下划线的答案。它首先按地址分组,然后使用组中的每个对象扩展起始对象。
var data = [].concat(array1, array2, array3);
var extendArray = function(arr){
return _.reduce(arr, (memo,val) => _.extend(memo, val), {hits: 0, buttons: 0, cons: 0});
}
var resultArray = _.chain(data)
.groupBy('address')
.map(extendArray)
.value()