Javascript 将数组中的其他值移动到新数组中

Javascript 将数组中的其他值移动到新数组中,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有两个一维数组,a和ba有值,b为空。a的长度是偶数。我想删除a中的所有其他值,并将它们移动到b,顺序与它们在a中的顺序相同 var a = [1, 2, 3, 4, 5, 6], b = []; 变成 var a = [1, 3, 5], b = [2, 4, 6]; 我认为filter会起作用,但我对它的性能不太满意,因为a的平均长度是300-400 b = a.filter((i, idx) => { return idx % 2 == 0; }); a = a.fil

我有两个一维数组,
a
b
<代码>a有值,
b
为空。
a
的长度是偶数。我想删除
a
中的所有其他值,并将它们移动到
b
,顺序与它们在
a
中的顺序相同

var a = [1, 2, 3, 4, 5, 6], b = [];
变成

var a = [1, 3, 5], b = [2, 4, 6];
我认为
filter
会起作用,但我对它的性能不太满意,因为
a
的平均长度是300-400

b = a.filter((i, idx) => {
    return idx % 2 == 0;
});
a = a.filter((i, idx) => {
    return idx % 2 == 1;
});
我也一直在研究lodash,看看这个库是否有什么可以帮助我的,唯一接近我要寻找的功能是


我非常感谢您的帮助,帮助我找到一种更好、更快的方法。

由于您必须遍历整个数组,因此您可以获得的最佳性能是0(n)或线性时间。可能有帮助的是减少循环的数量

var a=[];
var b=[];
function splitArray(arr)
{
    for (var i=0;i<arr.length;++i)
        {
            if (arr[i]%2 == 0)
                b.push(arr[i]);
            else
                a.push(arr[i]); 
        }
}
var a=[];
var b=[];
函数拆分数组(arr)
{

对于(var i=0;i要循环一次源,可以根据索引将值添加到特定数组中。例如:

constsource=[1,2,3,4,5,6];
设arrs=[],[];
for(设i=0;iconsole.log(b);
既然您提到了lodash,那么您可以使用:

a=[1,2,3,4,5,6];
设b=[];
设i=-1;
[a,b]==分区(a,(项)=>i++%2);
控制台日志(a);
console.log(b);

香草JS ES5,简单干净

var a = [1, 2, 3, 4, 5, 6], b = [];

for(var i = a.length-1; i >= 0; i--) {
  if(i % 2 === 1) {
    b.unshift(a.splice(i, 1)[0])
  }
}

基本上,它是向后迭代
a
,如果条件为真,则拼接项目并将其添加为
b

的第一项,过滤400个元素的小数组应该几乎是瞬时的。你对性能不满意是什么意思?你注意到延迟了吗?可以在一次迭代中完成ion,但它不会有太大的区别。你可以对给定的答案进行性能基准测试,看看lodash对vanilla js的性能会非常有趣,例如@slezica我同意它对400个元素不会有明显的区别。不过,如果执行很多次,它可能会有很大的区别。@Hinrich好主意,我将设置一个jsperf测试下面是对你所有答案的性能测试,非常感谢你的帮助!香草JS的优秀答案…我喜欢它比依赖库要好得多。