繁体   English   中英

根据值对对象数组进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM