按索引调整数组大小

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);

【讨论】:

以上是关于按索引调整数组大小的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer——13. 调整数组顺序使奇数位于偶数前面

垂直调整浏览器窗口大小时按比例调整图像大小?

如何调整视图的大小,同时按比例调整其子视图的大小?

按宽度按比例调整 UIImage 的大小

使用负索引调整大小的列表切片分配[重复]

visio 如何按指定比例调整形状大小