我有一些像这样的对象:
var array = [{
key: {name: "C Some name", id: 123},
value: {value: 1, element:"some element"}
}, {
key: {name: "A Name 2", id: 1234},
value: {value: 4, element:"some element 2"}
}, {
key: {name: "B Other name", id: 1235},
value: {value: 2, element:"some element 3"}
}]
我想按名称(键对象内部)和值(内部值对象)对此数组进行排序。 按名称排序的结果应返回此结果:
[{
key: {name: "A Name 2", id: 1234},
value: {value: 4, element:"some element 2"}
}, {
key: {name: "B Other name", id: 1235},
value: {value: 2, element:"some element 3"}
}, {
key: {name: "C Some name", id: 123},
value: {value: 1, element:"some element"}
}]
按值排序的结果应如下所示:
[{ key: {name: "C Some name", id: 123},
value: {value: 1, element:"some element"}
}, {
key: {name: "B Other name", id: 1235},
value: {value: 2, element:"some element 3"}
}, {
key: {name: "A Name 2", id: 1234},
value: {value: 4, element:"some element 2"}
}]
我尝试按名称排序:
array.sort(a,b){
return a.key["name"] - b.key["name"];
}
这是按值排序:
array.sort(a,b){
return a.key["value"] - b.key["value"];
}
但它不起作用。我该如何对这个数组进行排序?
答案 0 :(得分:4)
您应该将字符串与>
进行比较。
var array = [{
key: {name: "C Some name", id: 123},
value: {value: 1, element:"some element"}
}, {
key: {name: "A Name 2", id: 1234},
value: {value: 4, element:"some element 2"}
}, {
key: {name: "B Other name", id: 1235},
value: {value: 2, element:"some element 3"}
}];
var newArray = array.sort(function(first, second) {
var a = first.key.name;
var b = second.key.name;
if(a > b) {
return 1;
} else if(a < b) {
return -1;
} else {
return 0;
}
});
console.log(newArray);
&#13;
答案 1 :(得分:1)
其中一条路就是这样。
基本上,使用箭头功能进行排序回调,然后使用string
比较2 localeCompare
。
first.key.name.localeCompare(second.key.name)
对于整数值,您可以通过减法直接比较它们
first.value.value - second.value.value
。
重要的是要了解 comparer 函数如何适用于2个值a
和b
。
小于0:将
a
排序为低于b
的索引。归零:
a
和b
应视为相等,且不执行排序。大于0:将
b
排序为低于a
的索引
var array = [{
key: {name: "C Some name", id: 123},
value: {value: 1, element:"some element"}
}, {
key: {name: "A Name 2", id: 1234},
value: {value: 4, element:"some element 2"}
}, {
key: {name: "B Other name", id: 1235},
value: {value: 2, element:"some element 3"}
}]
var resultSortedByName = array.sort( (first,second) => {return first.key.name.localeCompare(second.key.name)} );
console.log(resultSortedByName);
var resultSortedByValue = array.sort( (first,second) => {return (first.value.value - second.value.value)} );
console.log(resultSortedByValue);