如何接近和对齐数组中的元素?
我已经尝试过:
let age = arr.sort(function(a, b) {
return b -a;
});
它适用于简单数组,但不起作用。在这个数组中:
let list = [
[
['firstName', 'Joe'],
['age', 42],
['gender', 'male'],
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['gender', 'female'],
],
[
['lastName', 'Kim'],
['age', 40],
['gender', 'female'],
],
];
它是双数组,并且 'age' 索引位置不同。我怎样才能接近“年龄”并对齐?我想升序排序。
回答
您可以使用fromEntries将数组项转换为对象,然后进行排序。但是您应该考虑将项目更新为对象以避免这种不必要的转换。
const list = [ [ ['firstName', 'Joe'], ['age', 42], ['gender', 'male'], ], [ ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['gender', 'female'], ], [ ['lastName', 'Kim'], ['age', 40], ['gender', 'female'], ], ];
list.sort((a, b) => Object.fromEntries(a).age - Object.fromEntries(b).age);
console.log(list);
回答
您可以通过查找可以找到年龄的子数组的索引来执行以下操作。从示例中我们可以看到年龄在索引 0 处,年龄值在子数组的索引 1 处。您可以比较年龄值。
list = [
[
['firstName', 'Joe'],
['age', 42],
['gender', 'male'],
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['gender', 'female'],
],
[
['lastName', 'Kim'],
['age', 40],
['gender', 'female'],
],
];
res = list.sort((a, b) => {
ageIndexA = a.findIndex(item => item[0] ==='age');
ageIndexB = b.findIndex(item => item[0] === 'age');
return a[ageIndexA][1] - b[ageIndexB][1];
});
console.log(res);