[英]Prevent double brackets when moving elements of arrays
我有两个数组( a
和b
),其中每个项目都必须移动到另一个数组( 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
循环同时遍历a
和b
并添加元素(如果有):
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);
如果a
和b
必须为空,这可能只是一个简单的:
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.