javascript - 按对象属性的键对对象数组进行排序

时间:2017-01-16 21:21:22

标签: javascript arrays sorting

我有一些像这样的对象:

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"];
}

但它不起作用。我该如何对这个数组进行排序?

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:1)

其中一条路就是这样。

基本上,使用箭头功能进行排序回调,然后使用string比较2 localeCompare
first.key.name.localeCompare(second.key.name)

对于整数值,您可以通过减法直接比较它们 first.value.value - second.value.value

重要的是要了解 comparer 函数如何适用于2个值ab

  
      
  • 小于0:将a排序为低于b的索引。

  •   
  • 归零:ab应视为相等,且不执行排序。

  •   
  • 大于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);