繁体   English   中英

如何在第二个数组中按相同的 position 对 JavaScript 数组项进行排序?

[英]How to sort JavaScript array items by same position in second array?

我有两种类型的 arrays,

具有相同数量的项目,其中一个是平面数组,第二个我有它们的新索引。

第一个数组:

let arrayOfPersons = [
 {
    myName: "Person 0"
 },
 {
    myName: "Person 1"
 }
....
];

索引默认从 0 到 n。

新索引的新数组:

let newIndexOfPerson = [
    { 
      myName: "Person 0" // or just old index 0 from array above
      newPersonIndex: 1
    }
....
];

那么,如何使用newIndexOfPerson数组中的新索引对具有旧索引(从 0 到 n)的对象进行排序?

谢谢!

那么,您想按 newPersonIndex 对数组newIndexOfPerson进行排序吗?

您可以使用 javascript 方法 sort(),因此您不需要自己编写复杂的函数。 从 MDN 检查 sort() 方法

你想要的代码是这样的。

newIndexOfPerson.sort((a, b) => (a.newPersonIndex> b.newPersonIndex) ? 1 : -1);

newIndexOfPerson上使用sort的一个副作用是它执行就地排序,而不是返回一个带有已排序条目的新数组,因此newIndexOfPerson数组本身将被修改。

如果不需要,您可以对该数组的副本进行排序(使用newIndexOfPerson.slice()来制作)。

但是,如果您确实需要 2 个 arrays 来读取数据,并且您知道开始时的正确顺序,而不是尝试使用自定义sort器进行排序,使用reduce来创建新数组并填充其条目可能更优雅、更快捷根据newIndexOfPerson中指定的指标和数据:

arrayOfPersons = newIndexOfPerson.reduce((newArrayOfPersons, entry) => {
        newArrayOfPersons[entry.newPersonIndex] = {
            myName: entry.myName
        };
        return newArrayOfPersons;
    }, 
    new Array(arrayOfPersons.length)
);

该代码具有线性时间复杂度,而sort具有对数复杂度。

它可以很容易地使用newIndexOfPerson中的“旧不道德”进行修改,而不仅仅是普通数据。 当然,这个解决方案期望 arrays 的长度匹配并且所有的索引都设置正确(否则,你会在结果数组中得到间隙)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM