使用slice()提取不起作用的数组段

时间:2018-02-21 12:01:03

标签: javascript arrays

我有一个包含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中获取值

4 个答案:

答案 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]