如何使用JavaScript轻松截断数组?

Ala*_* Le 93 javascript jquery

Linq有一个方便的运算符方法,Take()用于在实现的任何内容中返回给定数量的元素IEnumerable.在使用数组时,jQuery中有类似的东西吗?

Bob*_*Bob 162

有一种切片方法

array.slice(0, 4);
Run Code Online (Sandbox Code Playgroud)

将返回前四个元素.

如果要放弃其他值,请不要忘记将其分配回变量.

注意:这只是常规的javascript,不需要jquery.

  • 不会(0,4)返回前4而不是前5? (15认同)
  • 这实际上不是真的.Simon Keep是正确的 - .slice()方法的第二个参数是*返回的最后一个元素之后的数组位置*.array.slice(0,4)将返回元素0,1,2和3 - 总共4个元素.将第二个参数看作截止点,其中.slice(0,x)将从数组的开头返回所有元素,但不包括*. (11认同)
  • 不好的方法,你创建一个新的数组实例,记住编码js时的内存使用情况并不是一个坏主意. (6认同)
  • 不包括`end`,那么@SimonKeep 是对的,参见 MDN https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice (2认同)
  • 记住将它分配回变量,这很重要,看起来很简单 (2认同)

Jon*_*n M 112

(2年后......)如果你真的想截断一个数组,你也可以使用这个length属性:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]
Run Code Online (Sandbox Code Playgroud)

注意:如果分配的长度为比当前长度,未定义的数组元素的引入,如下所示.

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = 5;
alert(typeof stooges[4]); // alerts "undefined"
Run Code Online (Sandbox Code Playgroud)

编辑:

正如下面提到的@twhitehead,通过这样做可以避免添加未定义的元素:

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"
Run Code Online (Sandbox Code Playgroud)

  • 当我在代码中看到这个时,我感到很惊讶......但这是最好的方式(如果你从索引0截断)http://davidwalsh.name/empty-array (5认同)
  • 这是一个非常简单的解决方案. (3认同)
  • 垃圾收集怎么样呢? (3认同)
  • 惊人的!值得一提的是,这个方法是在修改同一个`Array`,而不是创建一个新的`Array`。 (3认同)
  • @JonathanM实际上,没有引入空值;新变量未定义,因为它们已声明但未分配任何值。 (2认同)
  • 要截断到特定长度而不在末尾引入未定义的元素,请尝试 `stooges.length = Math.min(stooges.length,5);` (2认同)

Cha*_*ick 21

如果你问如何截断(通过从末尾删除元素来修改数组),那么使用splice:

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]
Run Code Online (Sandbox Code Playgroud)

如果您询问如何在不修改原始数据的情况下检索数组的子集,请使用切片.

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]
Run Code Online (Sandbox Code Playgroud)

只记得splice修改,切片访问.作为第一个arg的负数表示从数组末尾开始的索引.


G. *_*hez 8

将.length属性设置为较低的值.

官方文档: Array.prototype.length

  • 要杀死数组中的所有元素,将length设置为零是最简单的. (3认同)

Pat*_*and 5

如果要同时获取元素以及从数组中删除元素,请使用splice.

如果要将元素保留在数组中,请使用slice