给你一个数组 arr,数组中有 2n 个元素,按 [x1, x2, …, xn, y1, y2, …, yn] 的格式排列。
请你将数组按 [x1, y1, x2, y2, …, xn, yn] 格式重新排列,返回重排后的数组。
const arr1 = [2, 5, 1, 3, 4, 7]; // [2, 3, 5, 4, 1, 7]const arr2 = [1, 2, 3, 4, 4, 3, 2, 1]; // [1, 4, 2, 3, 3, 2, 4, 1]
把数组由中间一分为二得出 a1, a2 两个数组,然后 a1 出一个元素,a2 出一个元素,依次完成。
let shuffle = (arr) => {let arrFirst = arr.slice(0, arr.length / 2),arrSecond = arr.slice(arr.length / 2);for (let i = 0; i < arrFirst.length; i++) {res.push(arrFirst[i], arrSecond[i]);}return res;}console.log(shuffle(arr1));console.log(shuffle(arr2));
简化写法,使用 map和利用数组下标索引的奇偶
const arr1 = [2, 5, 1, 3, 4, 7]; // [2, 3, 5, 4, 1, 7]const arr2 = [1, 2, 3, 4, 4, 3, 2, 1]; // [1, 4, 2, 3, 3, 2, 4, 1]let shuffle = (arr) =>arr.map((item, index, arr) =>index % 2 ? arr[arr.length / 2 + Math.floor(index / 2)] : arr[index / 2]);console.log(shuffle(arr1));console.log(shuffle(arr2));
