javascript - 如何对具有不同键的对象数组进行排序

标签 javascript reactjs

我正在尝试按特定位置的键对对象数组进行排序。唯一的问题是每个对象都有不同的键名。

这是我尝试排序的对象的示例:

let data = [
  {name: "James", x: 3, }, 
  {name: "Thomas", y: 1}, 
  {name: "Zack", z: 2}
];

我正在尝试按第二个键对其进行排序,因此顺序应该是

    [
      {name: "James", x: 3, }, 
      {name: "Zack", z: 2},
      {name: "Thomas", y: 1} 
    ];

我正在尝试这样做:

let data = [
      {name: "James", x: 3, }, 
      {name: "Thomas", y: 1}, 
      {name: "Zack", z: 2}
    ];

data.sort((a, b) => {
  let key1 = Object.keys(a)[1];
  let key2 = Object.keys(b)[1];
  return a[key1] > b[key2]
  });
console.log(data)

这是我的 jsbin

https://jsbin.com/lihefodoni/edit?html,js,console

不知道为什么它不起作用。我正在尝试在我的 react 应用程序中执行此操作,所以我不知道是否需要做一些不同的事情?

最佳答案

.sort回调期望一个数字作为返回值,而不是 bool 值(如 < 运算符将计算出的值)。返回数字差异:

let data = [
      {name: "James", x: 3, }, 
      {name: "Thomas", y: 1}, 
      {name: "Zack", z: 2}
    ];

data.sort((a, b) => {
  let key1 = Object.keys(a)[1];
  let key2 = Object.keys(b)[1];
  return b[key2] - a[key1]
});
console.log(data)

为了使排序更加可靠,.find键不是 name 的条目:

let data = [
      {name: "James", x: 3, }, 
      {name: "Thomas", y: 1}, 
      {name: "Zack", z: 2}
    ];

data.sort((a, b) => {
  const aEntry = Object.entries(a).find(([key]) => key !== 'name');
  const bEntry = Object.entries(b).find(([key]) => key !== 'name');
  return bEntry[1] - aEntry[1];
});
console.log(data)

关于javascript - 如何对具有不同键的对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56893909/

相关文章:

javascript - React-boilerplate 将 sagas 注入(inject)路由

javascript - 在 jQuery 中本地化全局 namsapce

Javascript 替换并更改变量中的字符串

javascript - React 依赖项需要以大写字母开头才能使 JSX 正常工作

javascript - 如何在 ReactJS 的 onScroll 事件中操作 DOM?

javascript - 无法使用选择器从Redux存储中获取值

javascript - 无法从 React 外部在 ReactJS 组件上设置 State

javascript - 附加如何使用用户脚本按类名从(动态)div 中提取文本?

javascript - SAPUI5 按下按钮打开链接

javascript - 在axios get请求中使请求参数可选