gpt4 book ai didi

javascript - 使用递归函数重新排序

转载 作者:行者123 更新时间:2023-11-30 11:03:41 25 4
gpt4 key购买 nike

如何使用递归函数对先偶数索引再奇数索引的数组重新排序?例如:输入:[5, 2, 4, 9]输出:[5, 4, 2, 9]

我想改进这段代码。

let arrayB = [],
arrayOdd = [],
arrayEven = [];
let i = 0;

const reorder = (arrayA) => {
if (arrayA.length >= 2) {
if (i < arrayA.length) {
i === 0 || i % 2 === 0 ? arrayEven.push(arrayA[i]) : arrayOdd.push(arrayA[i]);
i++;
arrayB = [...arrayEven, ...arrayOdd];
reorder(arrayA);
} else {
arrayOdd = [];
arrayEven = [];
i = 0;
}
return arrayB;
}
}

console.log(reorder([4, 8, 12, 16]));

console.log(reorder([1, 2, 3, 4, 5, 6, 7, 8, 9]));

最佳答案

不知道为什么需要递归函数。应该这样做:

const reorder = (a) => [...a.filter((_, i) => !(i % 2)), ...a.filter((_, i) => i % 2)];

console.log(reorder([4, 8, 12, 16]));
console.log(reorder([1, 2, 3, 4, 5, 6, 7, 8, 9]));


因为您在评论中规定您有使用最小空间要求的递归函数的说明,所以这里有一个使用 Array.prototype.splice() 的解决方案就地修改数组:

const reorder = (a, offset = 2) => {
if (offset < a.length) {
a.splice(offset / 2, 0, ...a.splice(offset, 1));
return reorder(a, offset + 2);
}
return a;
};

console.log(reorder([4, 8, 12, 16]));
console.log(reorder([1, 2, 3, 4, 5, 6, 7, 8, 9]));

请注意,与Array.prototype.sort() 函数一样,上述函数只是为了方便而返回数组。没有创建新数组。

关于javascript - 使用递归函数重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56573395/

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