使用slice切分数组返回空数组,如何将数组对半分割?
解决数组对半分割问题,以及slice返回空数组的原因
嘿,我来帮你理清这个问题!首先咱们先说说为什么slice会返回空数组——大概率是你用错了它的参数规则:slice(start, end)里,start是起始索引(包含),end是结束索引(不包含),如果start的值大于等于end,或者start超过了数组的最大索引,就会返回空数组。比如给一个长度为5的数组用slice(5, 10),或者slice(3, 1),结果都是空的。
接下来是正确的对半分割方法,其实很简单,只需要先算出数组的中间位置,再用slice分别截取前后两部分就行。这里分两种情况,你可以根据需求选:
把后半部分留更长(奇数长度时):用
Math.floor取中间索引const arr = [1, 2, 3, 4, 5]; const mid = Math.floor(arr.length / 2); // 计算得2 const firstHalf = arr.slice(0, mid); // 前半部分:[1, 2] const secondHalf = arr.slice(mid); // 后半部分:[3, 4, 5]把前半部分留更长(奇数长度时):用
Math.ceil取中间索引const arr = [1, 2, 3, 4, 5]; const mid = Math.ceil(arr.length / 2); // 计算得3 const firstHalf = arr.slice(0, mid); // 前半部分:[1, 2, 3] const secondHalf = arr.slice(mid); // 后半部分:[4, 5]
如果是偶数长度的数组,两种方法结果完全一致,比如长度为6的数组,Math.floor(6/2)和Math.ceil(6/2)都是3,前后各3个元素。
另外要注意,slice不会修改原数组,返回的是全新的数组,这点很友好~
内容的提问来源于stack exchange,提问作者Edo
相关产品推荐
相关产品推荐

