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

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

或者,换一种问法: 我如何在 Javascript 中截断一个数组?

131821 次浏览

有一个 切片方法

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr = arr.slice(0, 4);
console.log(arr);

将返回前四个元素。

如果您想丢弃其他值,不要忘记将它赋回给您的变量。

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

如果既要获取元素,又要从数组中删除元素,请使用 拼接

如果希望将元素保留在数组中,请使用 切片

如果希望有选择地从数组中提取元素,可以使用 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(", "));

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

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

如果您询问如何在不修改原始数组的情况下检索数组的子集,那么可以使用 切片

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

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

(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"

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

官方文件: 数组,原型,长度

如果您使用 take (3) ,我将假设数组最初被定义为参数3

const result = new Array(3)
// result = [undefined , undefined , undefined]

如果迭代器只返回2个值,或者在 take (3)命令之后过滤这些值,并且删除1个值,那么数组看起来就像

//result = [1 , 1 , undefined]

所以要截断可以使用的空元素数组

 result.filter((value) => value !== undefined);