Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据值对对象数组进行排序_Javascript - Fatal编程技术网

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

Javascript 根据值对对象数组进行排序,javascript,Javascript,我有一组对象: const array =[ { a: 'good car' }, { a: 'good car1' }, { a: 'good car2' }, { a: 'good car3' }, { a: 'good car4' }, { b: 'good car1' } ]; 我需要通过值对其进行排序,领带除外。在打领带的情况下,键用于断开领带。我搜索了很多,但无法使用答案,因为我在对象中的关键点不相同,而且在领带(值相同)的情况下,我无法处理。 有什么建

我有一组对象:

const array =[ 
  { a: 'good car' },
  { a: 'good car1' },
  { a: 'good car2' },
  { a: 'good car3' },
  { a: 'good car4' },
  { b: 'good car1' } 
];
我需要通过值对其进行排序,领带除外。在打领带的情况下,
用于断开领带。我搜索了很多,但无法使用答案,因为我在对象中的关键点不相同,而且在领带(值相同)的情况下,我无法处理。
有什么建议吗?

您可以获取条目,选择第一个条目并将其分解为key和value,对另一个对象采用相同的方式,然后返回链式排序值

var数组=[{v21:'sad sdd'},{aaa:'sad sdd'},{v11:'r err rr'},{hf32:'erwer fgh'},{z3f2:'agfrr vbbar'},{t142:'gggoog anfa'},{u23:'fa handler err'};
array.sort((a,b)=>{
var[keyA,valueA]=Object.entries(a)[0],
[keyB,valueB]=Object.entries(b)[0];
返回valueA.localeCompare(valueB)| keyA.localeCompare(keyB);
});
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
使用es6中的
排序

请尝试以下代码:

const数组=[
{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])
返回1
else if(Object.values(x)[0]Object.keys(y)[0])
返回1
else if(Object.keys(x)[0]
您可以尝试以下代码:

const数组=[
{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]]{
返回Object.keys(a)[0].localeCompare(Object.keys(b)[0]);
}
返回一个[Object.keys(a)[0]].localeCompare(b[Object.keys(b)[0]]);
});

console.log(数组)不使用比较功能的变体:

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);

必须使用其他的连接字符而不是“:”,如果值中需要它

一个对象中是否只有一个键/值对?请添加您的尝试。您所说的“在领带的情况下”是什么意思?根据您显示的数组,排序后的预期输出是什么?是的,只有一个键/值在有关系的情况下,我的意思是当值相同时,我应该使用它们的键进行排序