[英]Compare two JSON arrays in JQuery or Javascript
使用jQuery - 我想比較2個JSON數組:
origArray來自數據庫/ C#API:
var origArray = [ {
"TypeName": "Single",
"TypeID": "3121",
"TypeCount": "2"
},
{
"TypeName": "Double",
"TypeID": "4056",
"TypeCount": "2"
},
{
"TypeName": "Family",
"TypeID": "5654",
"TypeCount": "4"
}
];
userArray是從用戶輸入收集的:
var userArray = [ {
"TypeID": "3121",
"TypeCount": "2"
},
{
"TypeID": "4056",
"TypeCount": "3"
},
{
"TypeID": "3121",
"TypeCount": "3"
}
];
我想做的是循環userArray ,並通過TypeID “分組”,並對TypeCount求和 。
所以在上面的例子中:
TypeID: 3121
TypeCount: 5 (ie. 2 + 3)
TypeID: 4056
TypeCount: 3
意味着TypeID 3121會有3個差異,4056會有1個差異。
有沒有辦法從jQuery或本機Javascript(可以跨瀏覽器工作)獲取該信息?
謝謝你的幫助,
標記
定義一個函數,按每個數組按TypeID
和和TypeCount
:
function groupByTypeID (arr) {
var groupBy = {};
$.each(arr, function () {
var currentCount = groupBy[this.TypeID] || 0;
groupBy[this.TypeID] = currentCount + parseInt(this.TypeCount);
});
return groupBy;
}
然后,將兩個數組分組,並采取不同之處:
var userArrayGroups = groupByTypeID(userArray);
var origArrayGroups = groupByTypeID(origArray);
var diff = {};
for (var prop in userArrayGroups) {
diff[prop] = userArrayGroups[prop] - origArrayGroups[prop];
}
diff
將保持以下內容:
{
3121: 3
4056: 1
}
演示 。
如果你熟悉C#這個js庫 - linqjs 。 它包含所有.NET 4.0 LINQ方法和許多額外方法的實現。
你可以用Underscore做到這一點:
var result = _.chain(userArray)
.groupBy(function(value) {
// group by the TypeId
return value.TypeID;
})
.map(function(value) {
// iterate over every group
var addition = _.chain(value)
.pluck("TypeCount") // create an array with TypeCount values
.reduce(function(memo, num) {
return Number(memo) + Number(num); // add all the TypeCount values
})
.value();
return {
"TypeID": value[0].TypeID, // TypeID
"TypeCount": addition // total addition for this TypeID
};
})
.value();
這里的工作示例: http : //livecoding.io/3498441
我會有機會......
var mergeArray = []
var index;
for (var i = userArray.length - 1; i >= 0; i--) {
index = findByTypeID(mergeArray, userArray[i].TypeID);
if(!index){
mergeArray[index].TypeCount += parseInt(userArray[i].TypeCount)
} else{
mergeArray.push({
"TypeID": userArray[i].TypeID,
"TypeCount": parseInt(userArray[i].TypeCount)
});
}
};
function findByTypeID(arr, id){
for (var i = arr.length - 1; i >= 0; i--) {
if(arr[i].TypeID == id)
return i;
};
return -1;
}
這為您提供了mergeArray
所需的數據結構輸出
result = {};
for (var i in userArray) {
var elem = userArray[i]
if (!result[elem.TypeID])
result[elem.TypeID] = elem.TypeCount;
else
result[elem.TypeID] += elem.TypeCount;
}
return result;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.