我有以下数据:
var data = [[{x:"c", y:10}, {x:"a", y:20}, {x:"b", y:4}], [{x:"c", y:14}, {x:"a", y:22}, {x:"b", y:9}], [{x:"c", y:24}, {x:"a", y:65}, {x:"b", y:46}]]
我需要根据最后一个数组元素中'y'属性的值来排序每个数组的(x)元素(在父数组中)。结果将是:
[[{x:"c", y:10}, {x:"b", y:4}, {x:"a", y:20}], [{x:"c", y:14}, {x:"b", y:9}, {x:"a", y:22}], [{x:"c", y:24}, {x:"b", y:46}, {x:"a", y:65}]]
任何简单的方法吗?这是数据的全局结构:
var data = [[{x:"x_1", y:}, {x:"x_2", y:},.. {x:"x_N", y:}], [{x:"x_1", y:}, {x:"x_2", y:},.. {x:"x_N", y:}], [{x:"x_1", y:}, {x:"x_2", y:},.. {x:"x_N", y:}]]
我有一个包含3个数组的数组,每个数组包含N个哈希表 我需要根据最后一个元素(data [2])中'y'键的值来排序所有哈希表中的元素。
答案 0 :(得分:0)
data.sort(function(a,b){return b.y-a.y});
答案 1 :(得分:0)
我无法真正了解您如何归档您的演示结果的样子,但如果您想要文本所说的内容,那么就可以完成这项工作。
<强> ASC 强>
data.sort(function(a, b) {
return b[b.length-1].y - a[a.length-1].y;
});
<强> DESC 强>
data.sort(function(a, b) {
return a[a.length-1].y - b[b.length-1].y;
});
答案 2 :(得分:0)
要获得预期结果,您可以使用此算法。它只是data
中所有数组的循环,并使用公共sort-by-function对它们进行排序:
for (var i=0; i<data.length; i++)
data[i].sort(function(a, b) {
return (a.x < b.x) - (b.x < a.x);
});
> JSON.stringify(data)
[[{"x":"c","y":10},{"x":"b","y":4},{"x":"a","y":20}],[{"x":"c","y":14},{"x":"b","y":9},{"x":"a","y":22}],[{"x":"c","y":24},{"x":"b","y":46},{"x":"a","y":65}]]
请注意,它不是您尝试描述的内容,而是通过x
属性进行反向排序。
// get the last element and sort it
var last = data[data.length-1];
last.sort(function(a,b){ return a.y-b.y; });
// get the sort order:
var order = last.map(function(o){ return o.x; }); // ["c", "b", "a"]
// now, reorder the previous arrays:
for (var i=0; i<data.length-1; i++) { // sic: loop condition is correct!
// create a map for the items by their x property
var hash = data[i].reduce(function(map, o){
map[o.x] = o;
return map;
}, {});
// create the new array by mapping the order
data[i] = order.map(function(x) {
return hash[x];
});
};