我正在尝试按特定位置的键对对象数组进行排序。唯一的问题是每个对象都有不同的键名。
这是我尝试排序的对象的示例:
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/