如何接近和对齐数组中的元素?

我已经尝试过:

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


以上是如何接近和对齐数组中的元素?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>