gpt4 book ai didi

javascript - 以 "zipping"的方式组合两个数组 - JavaScript

转载 作者:搜寻专家 更新时间:2023-11-01 04:52:43 25 4
gpt4 key购买 nike

所以,我一直在想一些我可以用 JavaScript 中的数组做的小练习。我想到了以“压缩”方式组合两个数组的想法 (arrayA[0], arrayB[0], arrayA[1], arrayB[1]...) 等等等等。可能更长的数组中剩余的任何内容都将被添加到末尾。

我搜索过 stackoverflow - 我问的原因是我目前正在学习编程入门类(class),所以我们真的不知道可以用 JavaScript 做的很多“事情”。如果可能,希望看到使用“简单”方法的解决方案!

我目前已经采用了另一种方式,但我似乎无法将数组的其余部分添加到最后。

function alternatingMerge(array1, array2)
//this function will merge two different arrays in an alternating fashion
//i.e = array1[0], array2[0], array1[1], array2[1], array1[2], array2[2], ... , etc
{
var mergedArray;
var i; // while loop counter
var j; //
var k; //
var arrayLengths;

arrayLengths = array1.length + array2.length;
i = 0; //
j = 0; // ARRAY1 COUNTER
k = 0; // ARRAY2 COUNTER
mergedArray = new Array(arrayLengths);
//window.alert(mergedArray);

while (i < arrayLengths)
{
if (i%2 === 0)
{
mergedArray[i] = array2[j];
j = j + 1;
}
else
{
mergedArray[i] = array1[k];
k = k + 1;
}
i = i + 1;
}
return mergedArray;
}

我觉得这很简单,但如果能提供一些帮助,我们将不胜感激!

最佳答案

这是一个使用 ES6(现代浏览器)对任意大小的两个数组进行编织的小而有效的函数:

const w = (a, b) => a.length ? [a[0], ...w(b, a.slice(1))] : b;

const array1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const array2 = ['A', 'B', 'C', 'D', 'E'];

console.log(JSON.stringify(w(array1, array2)));

解释:

变量 w 被设置为这个短递归函数:

(a, b) => a.length ? [a[0], ...w(b, a.slice(1))] : b

没有评论的余地,我会逐条解释。

(a, b) => - 对于两个输入数组,ab

a.length - 检查第一个数组是否不为空。

? [___] - 如果不为空,则返回一个数组。

a[0], - 使此数组中的第一项与第一个数组中的第一项相同。

...w(b, a.slice(1)) - 使用数组 b 将同一函数的结果填充到数组的其余部分第一个参数和第二个参数的数组 a 的第一项以外的所有内容。

: b - 否则,如果第一个数组为空,则返回数组 b

它最终做的是在第一个和第二个数组之间切换,从该数组中删除第一个项目并将其递归传递回结果数组。它会一直这样做,直到其中一个数组没有剩余项为止,此时返回另一个数组的其余部分并将其添加到结果的末尾。


通过一些调整,它可以在任意数量的阵列中旋转。这个版本的运行方式基本相同,除了第一个数组获得默认值来处理没有输入的参数,第二个参数处理多个数组而不是一个。此外,在检查数组 a 的长度之前,它会计算 b 中的数组以查看是否还有任何数组需要循环。如果没有,则返回数组 a。如果还有剩余数组,但 a 为空,则使用剩余数组作为参数返回递归函数的结果。

const w = (a = [], ...b) => 
b.length ? a.length ? [a[0], ...w(...b, a.slice(1))] : w(...b) : a;

const array1 = [1, 2];
const array2 = '♦♡♣♤♥♢';
const array3 = ['A', 'B', 'C'];
const array4 = ['😊', '😔', '😠'];
const array5 = [null, NaN, undefined];

const stringify = (o) => JSON.stringify(o, (k, v) => v === undefined ? '__undefined__' : v !== v ? '__NaN__' : v).replace(/"__undefined__"/g, 'undefined').replace(/"__NaN__"/g, 'NaN');

console.log(stringify(w()));
console.log(stringify(w(array1)));
console.log(stringify(w(array1, array2)));
console.log(stringify(w(array1, array2, array3)));
console.log(stringify(w(array1, array2, array3, array4)));
console.log(stringify(w(array1, array2, array3, array4, array5)));

stringify 函数是我添加的,用于更正 JSON.stringify 转换 NaNundefinednull。它不会影响编织功能的工作方式。

关于javascript - 以 "zipping"的方式组合两个数组 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308012/

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