gpt4 book ai didi

javascript - 根据第一维中的一些项目排列二维数组

转载 作者:行者123 更新时间:2023-12-03 00:28:32 24 4
gpt4 key购买 nike

我有一个二维数组。并非每个维度中的所有项目都相似,但我想确保第二个数组中的项目与第一个数组位于同一位置。

例如:

array = [
["Jessica", "Ashley", "Emily", "Samantha", "Sarah", "Taylor"]
["Samantha", "Sarah", "Taylor", "Hannah", "Brittany", "Amanda"]
]

应该变成:

array = [
["Jessica", "Ashley", "Emily", "Samantha", "Sarah", "Taylor"]
["Hannah", "Brittany", "Amanda","Samantha", "Sarah", "Taylor"]
]

有什么建议吗?

注意保留第一个数组中名称的原始位置很重要,而不仅仅是将所有内容排序到最后

最佳答案

数组有 sort()接受函数的方法。在该函数中,您可以使用 indexOf 查找名称的索引。在第一个数组中并对其进行排序:

let arr = [
["Jessica", "Ashley", "Emily", "Samantha", "Sarah", "Taylor"],
["Samantha", "Sarah", "Taylor", "Hannah", "Brittany", "Amanda"]
]

arr[1].sort((a, b) => arr[0].indexOf(a) - arr[0].indexOf(b))

console.log(arr[1])

这不是很高效——它必须多次查看第一个数组才能对第二个数组进行排序。如果您有很多值并且第一个版本成为瓶颈,您可以创建一个将键映射到第一个数组的索引的查找:

let arr = [
["Jessica", "Ashley", "Emily", "Samantha", "Sarah", "Taylor"],
["Samantha", "Sarah", "Taylor", "Hannah", "Brittany", "Amanda"]
]

let lookup = arr[0].reduce((lookup, name, index) => {
lookup[name] = index
return lookup
}, {})

// when name is not in lookup use -1 to make them sort first
arr[1].sort((a, b) => (lookup[a] || -1) - (lookup[b] || -1))

console.log(arr[1])

编辑

要保持相同的索引而不仅仅是相同的排序顺序,您可以迭代第一个数组并交换第二个数组的位置。这可以确保您始终首先将较早的项目放置在正确的位置,这样您就不会重新交换它们:

let arr = [["Jessica", "Ashley", "Emily", "Samantha", "Sarah", "Taylor"], ["Hannah", "Brittany", "Amanda", "Ashley", "Samantha", "Taylor"]]

arr[0].forEach((item , i)=> {
let index = arr[1].indexOf(item);
if (index >= 0){
[arr[1][i], arr[1][index]] = [arr[1][index], arr[1][i]]

}
})

console.log(arr[1])

关于javascript - 根据第一维中的一些项目排列二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com