【发布时间】:2012-02-07 10:54:06
【问题描述】:
我有两个或多个 javascript 对象。我想合并它们,添加公共属性的值,然后按值的降序对它们进行排序。
例如
var a = {en : 5,fr: 3,in: 9}
var b = {en: 8,fr: 21,br: 8}
var c = merge(a,b)
c 应该是这样的:
c = {
fr: 24,
en: 13,
in:9,
br:8
}
即两个对象都合并,添加公共键的值,然后对键进行排序。
这是我尝试过的:
var a = {en : 5,fr: 3,in: 9}
var b = {en: 8,fr: 21,br: 8}
c = {}
// copy common values and all values of a to c
for(var k in a){
if(typeof b[k] != 'undefined'){
c[k] = a[k] + b[k]
}
else{ c[k] = a[k]}
}
// copy remaining values of b (which were not common)
for(var k in b){
if(typeof c[k]== 'undefined'){
c[k] = b[k]
}
}
// Create a object array for sorting
var arr = [];
for(var k in c){
arr.push({lang:k,count:c[k]})
}
// Sort object array
arr.sort(function(a, b) {
return b.count - a.count;
})
但我不认为它好。这么多循环:(如果有人能提供一个不那么混乱和好的代码,那就太好了。
【问题讨论】:
-
@Dogbert 到目前为止,我在这里,pastebin.com/VQehhcri
-
普通对象不排序。你需要一个数组来实现排序。
-
以下答案都不起作用,但我找到了一种方法,但我认为它不好。请调查并优化代码。这是粘贴箱。 pastebin.com/nEKB7zAc
-
@Jashwant 你的排序代码没问题,只要 porpoerties 是数字
标签: javascript jquery json