gpt4 book ai didi

javascript - 按模式对数组进行排序——javascript

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:26 25 4
gpt4 key购买 nike

对于一个数组

['one', 'one', 'two', 'two',  'three', 'one']

使用模式 ['one', 'two', 'three'] 将其转换为

['one', 'two', 'three', 'one', 'two', 'one']

我的想法是

const sortArray = oldArray => {
let newArr = [];

while (newArr < oldArray.length) {
// loop through array
for (let i = 0; i < arr.length; i++) {
// loop through pattern
for (let j = 0; j < pattern.length; j++) {
// match
if (arr[i] === pattern[j]) {
// add item to new array
newArr.push(arr[i]);
// remove item from old array
arr.shift();
} else {
// push item to end of array
arr.push(arr[i]);
// remove item from array
arr.shift()
}
}
}
}

return newArray;
}

我可以使用 map 来完成此操作,这是我用来解决此类问题的方法,但是当涉及到仅遍历具有模式的数组时,我感到非常困惑。有什么建议吗?

有了 map ,我就是这样做的

let a = ['one', 'one', 'two', 'two',  'three', 'one'];

const printValues = (arr, pattern) => {
let map = {};
let a = [];

arr.forEach((v) => {
if (!map[v]) map[v] = 1;
else map[v]++;
})

while (a.length !== arr.length) {
pattern.forEach((v) => {
if (map[v] > 0) {
a.push(v);
map[v]--;
}
})
}

console.log(a);
}

console.log(printValues(a, ['one', 'two', 'three']))

最佳答案

我认为您的想法是正确的,但您想要先遍历模式数组以保留顺序,然后再去查找 oldArray。在以下解决方案中,我还使用一个集合来存储已使用的索引。

const oldArray = ['one', 'one', 'two', 'two', 'three', 'one'];
const pattern = ['one', 'two', 'three'];

let newArray = [];
let added = new Set();

while (newArray.length < oldArray.length) {
for (let p of pattern) {
for (let i = 0; i < oldArray.length; i++) {
if (!added.has(i) && oldArray[i] === p) {
added.add(i);
newArray.push(p);
break;
}
}
}
}
console.log(newArray);

关于javascript - 按模式对数组进行排序——javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960920/

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