我有一个包含12条记录的数组。当我从中切出4个元素时。我向我展示了切片值,但是当我再次切割相同的数组时,它对我不起作用。
var arraySliced = [a,b,c,d,e,f,g,h,i,j,k,h]
var Array1 = this.arraySliced.slice(0,4);
var Array2 = this.arraySliced.slice(4,4);
var Array3 = this.arraySliced.slice(8,4);
Array1获取值: - a,b,c,d,但没有在数组2和3中获取值
答案 0 :(得分:2)
您正在分配一个对象而不是数组(作为您的要求),我替换了数组
如果你正在使用切片功能,那么实际的slice
函数定义是
array.slice(start, end)
尝试下面的代码snippat,
var arraySliced = ['a','b','c','d','e','f','g','h','i','j','k','h']
var Array1 = this.arraySliced.slice(0,4);
var Array2 = this.arraySliced.slice(5,7);
var Array3 = this.arraySliced.slice(8,11);
console.log(Array1);
console.log(Array2);
console.log(Array3);
答案 1 :(得分:2)
slice(start_number,end_number)
var Array2 = this.arraySliced.slice(4,4);
=>不会给出任何元素,因为它没有按语法获得任何数字。
如果您愿意,arraySliced.slice(4,5);
会提供输出["e"]
arraySliced.slice(8,4)
=>起始编号不能大于结束编号
答案 2 :(得分:0)
以下函数显示切片时的内容。
您需要说明块大小并让函数计算出块数。其余的只是为你做切片。
下溢只是一个安全措施,JavaScript并不关心您的结束索引是否超出数组范围。
var originalArray = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' ];
var arraySlices = partitionArray(originalArray, 4);
console.log(arraySlices);
function partitionArray(arr, blockSize) {
var partitions = [],
numBlocks = Math.ceil(arr.length / blockSize),
underflow = numBlocks * blockSize - arr.length;
for (var index = 0; index < numBlocks; index++) {
var startIndex = index * blockSize,
endIndex = startIndex + blockSize - (index === numBlocks - 1 ? underflow : 0);
partitions.push(arr.slice(startIndex, endIndex));
}
return partitions;
}
.as-console-wrapper { top: 0; min-height: 100%; }
答案 3 :(得分:0)
使用.slice()
时,您需要记住几件事。
如上所述,以及文档:.slice(startNumber, endNumber)
这两个参数都是可选的。
记住从零开始计算。
var Array0 = arraySliced(); // copies the entire array
var Array1 = arraySliced(0,4); // [a,b,c,d]
记住endNumber告诉JS在哪里停止计数但是DOSEN'T包括endNumber元素。 startNumber包含在结果数组中。
所以,你的.slice(4,4)
,开始计算元素索引= 4(但第5个元素:e)并停止计数相同的元素,但不包括它,所以基本上这导致一个空数组
.slice(8,4)
也会导致创建一个空数组。
最后,如果要从数组末尾开始计算,请使用负数:
.slice(-4); // [i,j,k,h]