按动态名称属性的值对JSON进行排序

时间:2015-08-07 18:07:19

标签: javascript arrays json sorting

我一直在努力做一个在线编码优秀,运动看起来像这样:

  

json数组A有一个随机数对象,包含一个键和一个   双重价值。阵列A最多可包含10000个对象。例如:A = [{“a”:   2.0},{ “一”:2.7},{ “C”:2.0},{ “B”:5.1},{ “d”:2.9},{ “C”:2.0},{ “F”:2.2} ,{“h”:2.1}]

     

另一个数组B有一组随机执行的和运算   键。这些键的值可以在A中找到。如果键不是   用A表示,所以它的值为零。例如:B = [“a + b”,“b + d + f”,“k + z”]

     

你的工作是组合数组B和A,提供一个数组C.   包含B的和运算结果。结果数组   必须按降序排序。结合上面的例子,   得到的数组将是:Ex:C = [{“b + d + f”:10.2},{“a + b”:9.8},   {“k + z”:0}]

代码看起来像这样(如果有更好的实现,请告诉我更小的O())

var a = [{"a": 2.0},{"a": 2.7},{"c": 2.0},{"b": 5.1},{"d": 2.9},{"c": 2.0},{"f": 2.2},{"h": 2.1}]
var b = ["a+b","b+d+f","k+z"];
var c = [];

function sumArrays(){	
	for (var sum in b){
		var keysToSum = b[sum].split("+");
		var sumatory = 0;
		for(var key in keysToSum){			
			for(var number in a){
				if(a[number].hasOwnProperty(keysToSum[key])){
					sumatory += a[number][keysToSum[key]];
				}
			}
		}

		c.push(JSON.parse("{\"" + b[sum] + "\":" + sumatory + "}"));
	}

	//c.sort(function(a,b){
	//	return a.value - b.value;
	//});
}

我无法对数组C进行排序,因为属性名称会更改。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您需要对象的第一个值:

function firstValue(obj){
   for(var prop in obj){
      return obj[prop];
   }
}

然后用它来排序

a.sort(function(a,b){ return firstValue(a)-firstValue(b)})