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

javascript-按对象属性的键对对象数组排序,javascript,arrays,sorting,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

我有一个如下所示的对象数组:

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: "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"}
}]
我想按名称(键对象内部)和值(值对象内部)对该数组进行排序。 按名称排序的结果应返回以下结果:

[{
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"}
}]
按值排序的结果应如下所示:

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

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

您应该将字符串与
进行比较

var数组=[{
键:{name:“C Some name”,id:123},
值:{value:1,元素:“某个元素”}
}, {
键:{name:“名称2”,id:1234},
值:{value:4,元素:“某些元素2”}
}, {
键:{name:“B其他名称”,id:1235},
值:{value:2,元素:“某个元素3”}
}];
var newArray=array.sort(函数(第一,第二){
var a=first.key.name;
var b=second.key.name;
如果(a>b){
返回1;
}否则如果(alog(newArray)方法之一是这样

基本上,使用Arrow函数进行排序回调,然后使用
localeCompare
比较2
string
first.key.name.localeCompare(second.key.name)

对于整数值,您可以通过执行减法直接进行比较。
first.value.value-second.value.value

重要的是要知道比较器函数如何为两个值
a
b
工作

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

  • 零:
    a
    b
    应视为相等,且不执行排序

  • 大于0:将
    b
    排序为低于
    a

var数组=[{
键:{name:“C Some name”,id:123},
值:{value:1,元素:“某个元素”}
}, {
键:{name:“名称2”,id:1234},
值:{value:4,元素:“某些元素2”}
}, {
键:{name:“B其他名称”,id:1235},
值:{value:2,元素:“某个元素3”}
}] 
var resultSortedByName=array.sort((first,second)=>{return first.key.name.localeCompare(second.key.name)});
log(resultSortedByName);
var resultSortedByValue=array.sort((第一,第二)=>{return(first.value.value-second.value.value)});

log(resultSortedByValue)
a.key[name]
表示您有一个名为
name
的变量,并且您希望使用该匹配名称访问
a.key
的属性。你试过
a.key.name
来获得正确的值吗?我可能应该在我的问题中设置a.key[“name”]什么与a.key.name相等?为什么要投否决票?尊重主持人,有时候适度是过度的!