按索引调整数组大小
Posted
技术标签:
【中文标题】按索引调整数组大小【英文标题】:Resize array by index 【发布时间】:2019-03-07 23:48:55 【问题描述】:我有一个类似...的数组
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
...,一个起始索引 let start = 2
和一个结束索引 let end = 5
。
我想调整以索引 startIndex 开始并以 endIndex 结束的数组的大小,如下例所示:
start = 2;
end = 3;
let result = [2, 3]
start = 2;
end = 2;
let result = [2]
start = 0;
end = 8;
let result = [0, 1, 2, 3, 4, 5, 6, 7, 8]
下面的这个 sn-p 是我到目前为止所得到的。但显然存在一些问题:
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
let start = 2
let end = 3
array.splice(0, start);
array.splice(end, array.length);
console.log(array)
【问题讨论】:
.splice(...)
的参数为indexToStartAt, numberOfElementsToRemove, [elements, to, add]
。在您的情况下,您希望指定 end - start + 1
以在进行第二次拼接时开始索引。或者像其他回答者推荐的那样使用.slice(...)
。
是否需要保持相同的数组引用?
【参考方案1】:
您可以使用Array.slice(start,end)
并将end
加一,因为您希望它具有包容性。
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
let start = 2
let end = 3
var result = array.slice(start, end+1);
console.log(result)
【讨论】:
【参考方案2】:您可以使用Array.slice()
获取新数组:
const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
const start = 2
const end = 3
const result = array.slice(start, end + 1);
console.log(result)
如果你想直接改变原始数组,你可以将它与Array.splice()
结合起来:
const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
const start = 2
const end = 3
array.splice(0, array.length, ...array.slice(start, end + 1));
console.log(array)
【讨论】:
【参考方案3】:当您将结果数组(第一次拼接后的数组)与实际数组 [有问题的数组] 的索引拼接时,您会得到该输出 请看下面的代码。运行这段代码,你就明白了
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
let start = 2
let end = 3
array.splice(0,start);
//After splice this is result array [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
console.log(array);
//If you splice again with end=3 index you get the result array as [2, 3, 4].
// To get your desired output as array you should work on array after you splice first time
array.splice(2,array.length);
console.log(array);
我希望这可以解释您的代码会发生什么。作为关于拼接方法的提醒。 splice() 方法在数组中添加/删除项目,并返回删除的项目。
语法:
array.splice(index, howmany, item1, ....., itemX)
【讨论】:
【参考方案4】:您可以使用Array#copyWithin
并调整数组的length
。
var start = 2,
end = 5,
array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
array.copyWithin(0, start, end + 1).length = end - start + 1;
console.log(array);
【讨论】:
以上是关于按索引调整数组大小的主要内容,如果未能解决你的问题,请参考以下文章