javascript - 将数组中的所有其他值移动到新数组中

标签 javascript arrays lodash

我有两个一维数组,aba 有值而 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 以查看该库是否有任何可能对我有帮助的东西,唯一接近我正在寻找的功能是 _.chunk(array, \[size=1\]) .

我感谢所有能帮助我找到更好、更快的方法来完成这项工作的人。

最佳答案

因为您提到了 lodash,您可以使用 _.partition 来做到这一点:

let a = [1, 2, 3, 4, 5, 6];
let b = [];
let i = -1;

[a, b] = _.partition(a, (item) => i++ % 2);

console.log(a);
console.log(b);
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

Partition 的 predicate 是恒等函数,它不包含项目的索引,所以这附带了一个外部索引 i 的妥协。

当然,您始终可以将此功能包装到它自己的函数中:

const splitEvenOdd = (array, i = -1) => _.partition(array, (item) => i++ % 2);

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

[a, b] = splitEvenOdd(a);

console.log(a);
console.log(b);
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

关于javascript - 将数组中的所有其他值移动到新数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655347/

相关文章:

java - 创建计数数组的最有效方法

javascript - 我怎样才能更好地优化这些数据库查询/功能流程?

javascript - 过滤一个字段具有多个值的属性 - List.js 和 Filter.js

Javascript 删除样式以更正布局

自调用函数中声明的类的 JavaScript Intellisense 在 Visual Studio 中不起作用

javascript - 为动态创建的范围变量赋值

用于在编译时检测对称数组的 C++ 模板编程

javascript - 如何使用 javascript 在表单中只接受 15 个字符?

javascript - 使用 for 循环替换数组中的元素 javascript 未正确替换元素

javascript - 在 react 中使用去抖动搜索输入