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


102

Linq有一个方便的运算符方法,Take()用于在实现的任何对象中返回给定数量的元素IEnumerable。jQuery中是否有类似的东西可以处理数组?

或者,提出不同的问题:如何截断Javascript中的数组?


22
伙计们,请在jQuery之前学习JavaScript。恐怕明天的问题将是“ jQuery在数组旁边公开了哪些其他数据类型?”。
Ionuț G. Stan,2009年

Answers:


184

切片方法

array.slice(0, 4);

将返回前四个元素。

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

注意:这只是普通的javascript,不需要jquery。


15
(0,4)是否会返回前4个而不是前5个?
西蒙(Simon)

11
这实际上是不对的。Simon Keep是正确的-.slice()方法的第二个参数是要返回的最后一个元素之后的数组位置。array.slice(0,4)将返回元素0、1、2和3-总共4个元素。将第二个参数视为截止点,其中.slice(0,x)将返回从数组开头到x的所有元素,但包括x。
Bungle 2012年

1
end不包括在内,那么@SimonKeep是正确的,见MDN developer.mozilla.org/en-US/docs/JavaScript/Reference/...
紫苑

2
请记住将其分配回变量,它的重要性非常简单,看起来似乎很简单
kolexinfos 2013年

6
不好的方法是,创建一个新的数组实例,在编写js并不是一个坏主意时,请记住内存使用情况。
G. Ghez 2015年

125

(2年后...)如果您确实想截断数组,则还可以使用以下length属性:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]

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

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

编辑:

如下所述@twhitehead,这样做可以避免添加未定义的元素:

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

5
当我在代码中看到它时,我首先感到惊讶...但这是最好的方法(如果您从索引0处截断)davidwalsh.name/empty-array
kumarharsh

5
这是一个非常简单的解决方案。
多米尼克2015年

3
用这种方式收集垃圾怎么样?
G. Ghez 2015年

1
@JonathanM实际上,没有引入空值;新变量未声明,因为它们已声明但未分配任何值。
哈佛Geithus

3
惊人!值得一提的是,此方法正在修改相同方法,Array而不是创建一个新方法Array
宽敞的

22

如果您要问如何截断(通过从末尾删除元素来修改数组),请使用splice

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]

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

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]

只要记住拼接修改,切片访问即可。作为第一个arg的负数表示从数组末尾开始的索引。




1

如果要有选择地将元素从数组中拉出,可以使用jQuery.grep方法。

(来自jQuery文档)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.