Как легко усечь массив с помощью JavaScript?

103

Linq имеет удобный метод оператора, вызываемый Take()для возврата заданного количества элементов во всем, что реализует IEnumerable. Есть ли что-нибудь подобное в jQuery для работы с массивами?

Или, спросили по-другому: как я могу обрезать массив в Javascript?

Алан Ле
источник
22
Ребята, пожалуйста, изучите JavaScript перед jQuery. Боюсь, завтрашний вопрос будет: «Какие еще типы данных jQuery предоставляет помимо массивов?».
Ionuț G. Stan

Ответы:

185

Есть метод нарезки

array.slice(0, 4);

Вернет первые четыре элемента.

Не забудьте вернуть его в свою переменную, если хотите отбросить другие значения.

Примечание. Это обычный javascript, в jquery нет необходимости.

Боб
источник
15
Не вернет ли (0,4) первые 4, а не первые 5?
Саймон Кип,
11
На самом деле это не так. Саймон Кип прав - второй аргумент метода .slice () - это позиция массива после последнего возвращаемого элемента. array.slice (0, 4) вернет элементы 0, 1, 2 и 3 - всего 4 элемента. Подумайте о втором аргументе как о точке отсечения, где .slice (0, x) вернет все элементы с начала массива до, но не включая x.
Bungle
1
endНЕ включен, тогда @SimonKeep прав, см. MDN developer.mozilla.org/en-US/docs/JavaScript/Reference/…
AsTeR
2
Не забудьте присвоить его переменной, это очень важно и просто, как может показаться
kolexinfos 01
6
плохой способ, вы создаете новый экземпляр массива, имейте в виду, что использование памяти при кодировании js - неплохая идея.
Г. Гез
126

(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
Это удивительно простое решение.
Dominique
3
А как насчет сборки мусора таким образом?
G. Ghez
1
@JonathanM На самом деле нулевые значения не вводятся; новые переменные не определены, поскольку они объявлены, но не имеют никакого значения.
Håvard Geithus
3
Удивительный! Стоит сказать, что этот метод модифицирует то же самое, Arrayа не создает новый Array.
Просторный
22

Если вы спрашиваете, как обрезать (изменить массив, удалив элементы с конца), используйте splice :

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]

Просто помните, что сращивание модифицируется, срезается доступ. Отрицательные числа в качестве первого аргумента указывают индекс с конца массива.

Чедвик
источник
11

Установите для свойства .length более низкое значение.

Официальная документация: Array.prototype.length

Г. Гез
источник
3
чтобы уничтожить все элементы в массиве, проще всего установить длину равной нулю.
Ханмари
5

Если вы хотите как получить элементы, так и удалить их из массива, используйте splice .

Если вы хотите сохранить элементы в массиве, используйте срез

ПатрикАкерстранд
источник
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(", "));
ScottKoon
источник