[英]sort an array of object accoring to the values
我有这个对象数组:
const array =[
{ a: 'good car' },
{ a: 'good car1' },
{ a: 'good car2' },
{ a: 'good car3' },
{ a: 'good car4' },
{ b: 'good car1' }
];
除领带的情况外,我需要通过值对它进行排序。 如果是平局,则使用key
打破平局。 我搜索了很多但无法使用答案,因为我的对象中的键不相同,并且在领带(值相同)的情况下,我也无法处理。 有什么建议么?
您可以获取条目,选择第一个条目并将其解构为键和值,然后将其用于另一个对象,然后返回链接的排序值。
var array = [{ v21: 'sad sdd' }, { aaa: 'sad sdd' }, { v11: 'r err rr' }, { hf32: 'erwwer fgh' }, { z3f2: 'agfrr vbbar' }, { t142: 'gggoog anfa' }, { u23: 'fa handle err' }]; array.sort((a, b) => { var [keyA, valueA] = Object.entries(a)[0], [keyB, valueB] = Object.entries(b)[0]; return valueA.localeCompare(valueB) || keyA.localeCompare(keyB); }); console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用sort
从ES6。
试试这个代码:
const array =[
{ v21: 'sad sdd' },
{ v11: 'r err rr' },
{ hf32: 'erwwer fgh' },
{ z3f2: 'agfrr vbbar' },
{ t142: 'agfrr vbbar' },
{ u23: 'fa handle err' }
]
array.sort( (x,y) => {
if ( Object.values(x)[0] > Object.values(y)[0] )
return 1
else if ( Object.values(x)[0] < Object.values(y)[0] )
return -1
else {
if ( Object.keys(x)[0] > Object.keys(y)[0] )
return 1
else if ( Object.keys(x)[0] < Object.keys(y)[0] )
return -1
}
})
您可以尝试以下代码:
const array =[ { v21: 'sad sdd' }, { v11: 'r err rr' }, { hf32: 'erwwer fgh' }, { z3f2: 'agfrr vbbar' }, { z3f1: 'agfrr vbbar' }, { t142: 'gggoog anfa' }, { u23: 'fa handle err' } ]; array.sort((a,b) => { if (a[Object.keys(a)[0]] === b[Object.keys(b)[0]]) { return Object.keys(a)[0].localeCompare(Object.keys(b)[0]); } return a[Object.keys(a)[0]].localeCompare(b[Object.keys(b)[0]]); }); console.log(array);
不使用比较功能的变体:
const array = [
{ v21: "sad sdd" },
{ v11: "r err rr" },
{ hf32: "erwwer fgh" },
{ z3f2: "sad sdd" },
{ t142: "gggoog anfa" },
{ u23: "fa handle err" }
];
const result = array
.map(item => ({
key: Object.keys(item)[0],
value: item[Object.keys(item)[0]]
}))
.map(item => `${item.value}:${item.key}`)
.sort()
.map(item => item.split(":"))
.map(item => ({ [item[1]]: item[0] }));
console.log(result);
如果必须在值中使用,则必须使用其他一些连接字符代替“:”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.