我有两个一维数组,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 以查看该库是否有任何可能对我有帮助的东西,唯一接近我正在寻找的功能是 _.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/