2009-06-04 2 views
56

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

+16

Ребята, пожалуйста, узнать JavaScript, прежде чем JQuery. Боюсь, завтра будут вопросы: «Какие другие типы данных jQuery выставляются рядом с массивами?». –

ответ

109

Существует slice метод

array.slice(0, 4); 

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

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

Примечание: Это просто обычный javascript, не требуется jquery.

+1

Прекрасное спасибо Бобу. –

+13

Не мог (0,4) вернуть первые 4 не первые 5? –

+10

Это на самом деле не так. Симон держит правильно.Второй аргумент метода slice() - это позиция массива * после * последнего возвращаемого элемента. array.slice (0, 4) вернет элементы 0, 1, 2 и 3 - всего 4 элемента. Вспомните второй аргумент как точку отсечки, где .slice (0, x) вернет все элементы из начала массива, но не *, а не x, включая x. – Bungle

4

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

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

2

Если вы хотите выборочно тянуть элементы из массива, вы можете использовать метод 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(", ")); 
18

Если вы спрашиваете, как усечение (изменить массив путем удаления элементов из конца), а затем использовать 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 указывают индекс от конца массива.

85

(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) http://davidwalsh.name/empty-array –

+2

Это удивительно простое решение. – Dominique

+2

А как насчет сбора мусора, делающего thi way? –

8

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

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

+3

, чтобы убить все элементы массива, установить длину до нуля проще всего. – hanmari

Смежные вопросы