JavaScript 中等分数组

Posted by cl9000 on July 06, 2020

在事情成功之前,一切总看似不可能。——<纳尔逊·曼德拉>

作者:Ashish Lahoti
译者:cl9000
来源:https://codingnconcepts.com/javascript/how-to-divide-array-in-equal-parts-in-javascript/

在本教程中,我们将学习如何使用 Array.splice() JavaScript中的方法将数组等分。我们还将学习它与 Array.slice() 方法的不同之处。

1. 将数组分为两个相等的部分

我们可以分两步将数组分成两半:

  • 使用 length/2Math.ceil() 方法找到数组的中间索引,
  • 使用此中间索引和 Array.splice() 方法获取数组的两个相等部分
1
2
3
4
5
6
7
8
9
const list = [1, 2, 3, 4, 5, 6];
const middleIndex = Math.ceil(list.length / 2);

const firstHalf = list.splice(0, middleIndex);
const secondHalf = list.splice(-middleIndex);

console.log(firstHalf); // [1, 2, 3]
console.log(secondHalf); // [4, 5, 6]
console.log(list); // []

Array.splice() 方法通过删除,替换或添加元素来更改数组的内容。请勿将此方法与 Array.slice() 用于 复制数组 的方法混淆。

  • list.splice(0, middleIndex) 从数组中从0索引开始的前3个元素中删除并返回它。
  • list.splice(-middleIndex) 从数组中删除最后3个元素并返回它。

在这两个操作的最后,由于我们从数组中删除了所有元素,因此原始数组为空

另请注意,在上述情况下,元素数为偶数,如果元素数为奇数,则前半部分将有一个额外的元素。

1
2
3
4
5
const list = [1, 2, 3, 4, 5];
const middleIndex = Math.ceil(list.length / 2);

list.splice(0, middleIndex); // returns [1, 2, 3]
list.splice(-middleIndex); // returns [4, 5]

2. Array.slice和Array.splice

有时您 不希望更改原始数组,也可以通过使用以下 Array.slice()Array.splice() 方法链接起来完成此操作

1
2
3
4
5
6
7
8
9
const list = [1, 2, 3, 4, 5, 6];
const middleIndex = Math.ceil(list.length / 2);

const firstHalf = list.slice().splice(0, middleIndex);
const secondHalf = list.slice().splice(-middleIndex);

console.log(firstHalf); // [1, 2, 3]
console.log(secondHalf); // [4, 5, 6]
console.log(list); // [1, 2, 3, 4, 5, 6];

我们看到原始数组保持不变,因为我们在使用 Array.slice() 删除元素之前先使用 Array.splice() 复制了原始数组。

3. 将数组分为三个相等的部分

让我们定义一个数组,并使用 Array.splice 方法将它们分为三个相等的部分。

1
2
3
4
5
6
7
8
9
10
const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const threePartIndex = Math.ceil(list.length / 3);

const thirdPart = list.splice(-threePartIndex);
const secondPart = list.splice(-threePartIndex);
const firstPart = list;

console.log(firstPart); // [1, 2, 3]
console.log(secondPart); // [4, 5, 6]
console.log(thirdPart); // [7, 8, 9]

让我们分解一下它是如何发生的:

  • 我们首先使用提取了thirdPart list.splice(-threePartIndex),它删除了最后3个元素[7、8、9],此时list仅包含前6个元素[1、2、3、4、5、6]
  • 现在,我们使用提取了secondPart list.splice(-threePartIndex),它从剩余list = [1, 2, 3, 4, 5, 6]中删除了最后3个元素[4,5,6],这时list仅包含前3个元素[1,2,3],它们是firstPart。

4. Array.splice的更多信息

让我们看一下使用 Array.splice() 方法的更多示例。请注意,array. slice()array. splice() 之前使用过,因为我们不想改变原始数组。如果你想在下面的例子中改变原来的数组,你可以省略array.slice()

1
2
// Define an array
const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  • 获取数组的第一个元素
1
list.slice().splice(0, 1); // [1]
  • 获取数组的前五个元素
1
list.slice().splice(0, 5); // [1, 2, 3, 4, 5]
  • 获取数组的前五个元素之后的所有元素
1
list.slice().splice(5);   // [6, 7, 8, 9]
  • 获取数组的最后一个元素
1
list.slice().splice(-1);   // [9]
  • 获取数组的最后三个元素
1
list.slice().splice(-3);   // [7, 8, 9]

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!