我有两个数组
levelOne = [
{Code: "A", Count: 0, Date: 2017-04-01,....},
{Code: "A", Count: 0, Date: 2017-05-01,....},
{Code: "B", Count: 0, Date: 2017-04-01,....},
{Code: "B", Count: 0, Date: 2017-05-01,....}
];
levelTwo = [
{Code: "A", Count: 10, Date: 2017-04-01,....},
{Code: "A", Count: 12, Date: 2017-05-01,....},
{Code: "B", Count: 50, Date: 2017-04-01,....},
{Code: "B", Count: 18, Date: 2017-05-01,....},
{Code: "A", Count: 20, Date: 2017-05-01,....},
{Code: "B", Count: 60, Date: 2017-04-01,....},
{Code: "B", Count: 77, Date: 2017-05-01,....}
];
我想用相同代码和日期的 levelTwo 数组中的计数总和来更新 levelOne 数组的计数。
到目前为止我做了什么?
我在 levelOne 上放置了一个 $.each 循环,但我被卡住了。
$.each( levelOne , function( index, value ){
//I'm stuck
$.each( levelTwo , function( idx, val ){
if(value.Code==val.Code && value.Date == val.Date){
//I'm stuck
}
//I'm stuck
});
});
有什么建议吗?有更好的方法来实现吗?
最佳答案
您可以使用哈希表的相当前向的方法,首先迭代目标数组,然后迭代源数组进行计数。
通过迭代 levelOne
,哈希表将填充代码和日期值作为键,对象本身作为值。
迭代levelTwo
将实际的Count
添加到结果数组中。
var levelOne = [{ Code: "A", Count: 0, Date: '2017-04-01' }, { Code: "A", Count: 0, Date: '2017-05-01' }, { Code: "B", Count: 0, Date: '2017-04-01' }, { Code: "B", Count: 0, Date: '2017-05-01' }],
levelTwo = [{ Code: "A", Count: 10, Date: '2017-04-01' }, { Code: "A", Count: 12, Date: '2017-05-01' }, { Code: "B", Count: 50, Date: '2017-04-01' }, { Code: "B", Count: 18, Date: '2017-05-01' }, { Code: "A", Count: 20, Date: '2017-05-01' }, { Code: "B", Count: 60, Date: '2017-04-01' }, { Code: "B", Count: 77, Date: '2017-05-01' }],
getKey = function (o) { return ['Code', 'Date'].map(function (k) { return o[k]; }).join('|'); },
hash = Object.create(null);
levelOne.forEach(function (o) { hash[getKey(o)] = o; });
levelTwo.forEach(function (o) { hash[getKey(o)].Count += o.Count; });
console.log(levelOne);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ES6 带有 Map
var levelOne = [{ Code: "A", Count: 0, Date: '2017-04-01' }, { Code: "A", Count: 0, Date: '2017-05-01' }, { Code: "B", Count: 0, Date: '2017-04-01' }, { Code: "B", Count: 0, Date: '2017-05-01' }],
levelTwo = [{ Code: "A", Count: 10, Date: '2017-04-01' }, { Code: "A", Count: 12, Date: '2017-05-01' }, { Code: "B", Count: 50, Date: '2017-04-01' }, { Code: "B", Count: 18, Date: '2017-05-01' }, { Code: "A", Count: 20, Date: '2017-05-01' }, { Code: "B", Count: 60, Date: '2017-04-01' }, { Code: "B", Count: 77, Date: '2017-05-01' }],
hash = new Map,
getKey = o => ['Code', 'Date'].map(k => o[k]).join('|');
levelOne.forEach(o => hash.set(getKey(o), o));
levelTwo.forEach(o => hash.get(getKey(o)).Count += o.Count);
console.log(levelOne);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 从一个数组中按组获取 Sum 并将总和更新到同一组名称的另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350058/