我有一个包含对象列表的数组。我想在特定索引处(例如4,这个值实际上是一个变量)将此数组拆分,然后将拆分后的第二部分存储到另一个数组中。可能很简单,但我无法想到一个好的方法来完成这个任务。
我有一个包含对象列表的数组。我想在特定索引处(例如4,这个值实际上是一个变量)将此数组拆分,然后将拆分后的第二部分存储到另一个数组中。可能很简单,但我无法想到一个好的方法来完成这个任务。
使用 slice 方法,如下:
var ar = [1,2,3,4,5,6];
var p1 = ar.slice(0,4);
var p2 = ar.slice(4);
您可以使用 Array@splice
方法将数组中指定索引后的所有元素从数组末尾删除并返回它们:
x = ["a", "b", "c", "d", "e", "f", "g"];
y = x.splice(3);
console.log(x); // ["a", "b", "c"]
console.log(y); // ["d", "e", "f", "g"]
ar.slice(startIndex,length);
或者
ar.slice(startIndex);
这两种方法都是针对数组进行的操作,可以根据需要选择是否指定返回的元素个数。
var ar = ["a","b","c","d","e","f","g"];
var p1 = ar.slice(0,3);
var p2 = ar.slice(3);
console.log(p1);
console.log(p2);
const splitAt = (i, arr) => {
const clonedArray = [...arr];
return [clonedArray.splice(0, i), clonedArray];
}
const [left, right] = splitAt(1, [1,2,3,4])
console.log(left) // [1]
console.log(right) // [2,3,4]
const [left1, right1] = splitAt(-1, [1,2,3,4])
console.log(left1) // []
console.log(right1) // [1,2,3,4]
const [left2, right2] = splitAt(5, [1,2,3,4])
console.log(left1) // [1,2,3,4]
console.log(right1) // []
与其他解决方案相比,它的一些优点是:
slice
将无法正确工作。splice
的解决方案可能会改变原始数组。splice
操作,而不是 2 个 slice
操作。但你需要进行基准测试以查看是否存在实际性能差异。来自lodash的简单函数:
const mainArr = [1,2,3,4,5,6,7]
const [arr1, arr2] = _.chunk(mainArr, _.round(mainArr.length / 2));
const splitArrayByIndex = (arr, index) => {
if (index > 0 && index < arr.length) {
return [arr.slice(0, index), arr.slice(-1 * (arr.length - index))]
}
}
const input = ['a', 'x', 'c', 'r']
const output = splitArrayByIndex(input, 2)
console.log({ input, output })
你也可以使用underscore/lodash包装器:
var ar = [1,2,3,4,5,6];
var p1 = _.first(ar, 4);
var p2 = _.rest(ar, 4);
_.first
是_.head
的别名,不接受第二个参数。https://lodash.com/docs/4.17.4#first - jelder