繁体   English   中英

移动数组元素时防止双括号

[英]Prevent double brackets when moving elements of arrays

我有两个数组( ab ),其中每个项目都必须移动到另一个数组( c )中

我使用 push/slice 方法来做到这一点,但它在每个元素中添加了括号

这是代码:

 let a = [0, 6, 2, 0, 1, 1]; let b = [1, 3, 9, 0, 0, 1]; let c = []; for (let i = 5; a.length > 0 || b.length > 0; i--) { c.push(a.splice(i, 1), b.splice(i, 1)); } console.log(c) // I would like [element1, element2, etc]

相反,是否有另一种方法(替换c.push(a.splice(i, 1), b.splice(i, 1))不为每个元素添加括号

谢谢!

基于评论“最好让它们保持相同的顺序”

使用另一个答案使用.pop .. 使用.shift从数组的开头而不是结尾删除

此外,您可以使用 while 循环代替

 let a = [0, 6, 2, 0, 1, 1]; let b = [1, 3, 9, 0, 0, 1]; let c = []; while(a.length > 0 || b.length) { c.push(a.shift(), b.shift()); } console.log(c)

当然,如果数组长度相同,上面的就可以了

但是,根据您的原始代码......这适用于长度不均匀的数组:

 let a = [0, 6, 2, 0, 1, 1]; let b = [1, 3, 9, 0, 0, 1, 99]; let c = []; while(a.length > 0 || b.length) { c.push(...a.splice(0,1), ...b.splice(0, 1)); } console.log(c)

请注意拼接始终位于索引 0 - 以保持顺序

使用您的确切答案,我所做的就是访问每个拼接事物中的0位置

 let a = [0, 6, 2, 0, 1, 1]; let b = [1, 3, 9, 0, 0, 1]; let c = []; for (let i = 5; a.length > 0 || b.length > 0; i--) { c.push(a.splice(i, 1)[0], b.splice(i, 1)[0]); } console.log(c) // I would like [element1, element2, etc]

我已经评论过了,但这是一个答案,所以这里是答案

 let a = [0, 6, 2, 0, 1, 1]; let b = [1, 3, 9, 0, 0, 1]; let c = []; for (let i = 5; a.length > 0 || b.length > 0; i--) { c.push(a.pop(), b.pop()); } console.log(c);

简单的for循环同时遍历ab并添加元素(如果有):

 let a = [0, 2, 4, 6, 8, 10, 12, 14]; let b = [1, 3, 5, 7, 9]; let c = []; for (let i = 0; i < Math.max(a.length, b.length); i++) { if (i < a.length) c.push(a[i]); if (i < b.length) c.push(b[i]); } console.log(c);

这假设数组的长度不等。 如果它们总是相等,则不需要if语句。

等长数组的替代实现:

 let a = [0, 2, 4, 6, 8, 10]; let b = [1, 3, 5, 7, 9, 11]; let c = a.flatMap((x, i) => [x, b[i]]); console.log(c);

如果ab必须为空,这可能只是一个简单的:

a.length = 0; 
b.length = 0;

在创建c之后,而不是不断地改变两个数组。

spread 语法是 JavaScript ES6 中运算符集的新增内容。 它接受一个可迭代对象(例如一个数组)并将其扩展为单个元素。

spread 语法通常用于制作 JS 对象的浅拷贝。 使用此运算符可使代码简洁并增强其可读性。

所以,改为使用:

let a = [0, 6, 2, 0, 1, 1];
let b = [1, 3, 9, 0, 0, 1];
let c = [...a,...b]
console.log(c)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM