Xti*_*ian 34 javascript arrays
我有一个阵列,我想分成两半.所以我可以将前半部分放在右侧,将后半部分放在左侧.
我之前使用过拼接功能:
var leftSide = arrayName.splice(0,2);
Run Code Online (Sandbox Code Playgroud)
但不确定无论大小如何将其拼接成一半,因为数组的大小会动态变化.
red*_*777 59
var half_length = Math.ceil(arrayName.length / 2);
var leftSide = arrayName.splice(0,half_length);
Run Code Online (Sandbox Code Playgroud)
在Orbit评论中编辑了@Lightness Races之后的代码
Joe*_*oyd 33
如果您需要避免突变,例如,如果您必须拆分数组,您不想改变原始数据,或者它可能会导致您的应用程序中出现一些非常奇怪的行为.
你可以通过使用slice而不是来解决这个问题splice
let yourArray = props.someArray;
let halfwayThrough = Math.floor(yourArray.length / 2)
// or instead of floor you can use ceil depending on what side gets the extra data
let arrayFirstHalf = yourArray.slice(0, halfwayThrough);
let arraySecondHalf = yourArray.slice(halfwayThrough, yourArray.length);
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 17
您可以简单地引用数组的长度:
var leftSide = arrayName.splice(0, Math.floor(arrayName.length / 2));
Run Code Online (Sandbox Code Playgroud)
由于.splice()实际上从源数组中删除了元素,因此数组中的其余元素将是右半部分的元素.
Math.floor()将向下舍入,使左侧比奇数长度小一侧.你可以使用,Math.ceil()如果你想要向上舍入,当长度为奇数时,左侧比右侧多一个.
您还可以使用 ES6 解构和slice(),这样原始数组就不会被改变。
const yourArray;
let leftSide,rightSide;
const m = Math.floor(yourArray.length/2);
const [leftSide,rightSide] = [yourArray.slice(0,m), yourArray.slice(m,yourArray.length)];
console.log(leftSide);
console.log(rightSide);
Run Code Online (Sandbox Code Playgroud)
let leftSide = myArray.splice(0, Math.ceil(myArray.length / 2));
//The right side is stored in "myArray"
Run Code Online (Sandbox Code Playgroud)
例如:
let letters = ['a', 'b', 'c', 'd', 'e'];
let leftSide = letters.splice(0, Math.ceil(letters.length /2));
let rightSide = letters;
console.log(leftSide);
=> ['a', 'b', 'c']
console.log(rightSide);
=> ['d', 'e']
Run Code Online (Sandbox Code Playgroud)
更多信息: splice在 MDN 文档中
请注意,这会修改您的原始数组。如果要保留原始数组,请克隆该数组,然后对克隆的数组使用 splice。来自一个关于克隆数组的问题:
有一个巨大的 BENCHMARKS 线程,提供以下信息:
对于 Blink 浏览器,slice() 是最快的方法,concat() 有点慢,而 while 循环慢 2.4 倍。
对于其他浏览器, while 循环是最快的方法,因为这些浏览器没有对切片和连接进行内部优化。
//Fastest for Blink browsers (Opera/Chromium):
let clonedArray = originalArray.slice();
//For other browsers:
let clonedArray = [];
var i = myArray.length;
while (i--) clonedArray[i] = myArray[i];
Run Code Online (Sandbox Code Playgroud)
看看 lodash chunk:
var myArray = [1, 2, 3, 4, 5, 6, 7, 8];
var pivot = _.ceil(myArray.length / 2);
// => 4
console.log(_.chunk(myArray, pivot));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48596 次 |
| 最近记录: |