JavaScript ile bir dizi nasıl kolayca kesilir?


103

Linq, Take()uygulayan herhangi bir şeyde belirli sayıda öğeyi döndürmek için çağrılan uygun bir operatör yöntemine sahiptir.IEnumerable . Dizilerle çalışmak için jQuery'de benzer bir şey var mı?

Veya farklı bir şekilde sorulur: Javascript'te bir diziyi nasıl kesebilirim?


22
Çocuklar lütfen jQuery'den önce JavaScript öğrenin. Korkarım yarının soruları "jQuery Dizilerin yanında başka hangi veri türlerini açığa çıkarır?" Olacak.
— Ionuț G. Stan

Yanıtlar:


185

Bir dilim yöntemi var

array.slice(0, 4);

İlk dört öğeyi döndürür.

Diğer değerleri atmak istiyorsanız, onu değişkeninize geri atamayı unutmayın.

Not: Bu sadece normal bir javascript, jquery'ye gerek yok.


15
(0,4) ilk 5'i değil ilk 4'ü döndürmez mi?
— Simon Keep

11
Bu aslında doğru değil. Simon Keep doğrudur - .slice () yönteminin ikinci argümanı, döndürülecek son öğeden sonraki dizi konumudur . array.slice (0, 4) 0, 1, 2 ve 3 - toplam 4 öğe - döndürecektir. İkinci bağımsız değişkeni kesme noktası olarak düşünün; burada .slice (0, x), dizinin başlangıcından x'e kadar olan ancak dahil olmayan tüm öğeleri döndürür .
— Bungle

1
enddahil DEĞİLDİR, sonra @SimonKeep haklıdır, bkz. MDN developer.mozilla.org/en-US/docs/JavaScript/Reference/…
— AsTeR

2
Değişkene geri atamayı unutmayın, göründüğü kadar basittir
— kolexinfos

6
kötü bir şekilde, yeni bir dizi örneği oluşturursunuz, js kodlamak kötü bir fikir olmadığında bellek kullanımını aklınızda bulundurun.
— G. Ghez

126

(2 yıl sonra ...) Bir diziyi gerçekten kesmek istiyorsanız, şu özelliği de kullanabilirsiniz length:

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

Not: Mevcut uzunluktan daha uzun bir uzunluk atarsanız , tanımlanmamış dizi öğeleri aşağıda gösterildiği gibi sunulur.

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

DÜZENLE:

@Twhitehead aşağıda belirtildiği gibi, bunu yaparak tanımsız elemanların eklenmesinden kaçınılabilir:

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

5
İlk önce bunu bir kodda gördüğümde şaşırdım ... Ama bu en iyi yol (eğer 0 dizininden
— kısalıyorsanız

5
Bu inanılmaz derecede basit bir çözüm.
— Dominique

3
Çöp toplama bu şekilde yapılırsa ne olacak?
— G. Ghez

1
@JonathanM Aslında, null değerler tanıtılmaz; yeni değişkenler tanımlandıklarından ancak herhangi bir değere atanmadıklarından tanımsızdır.
— Håvard Geithus

3
İnanılmaz! Bu yöntemin Arrayyeni bir tane oluşturmak yerine aynı şeyi değiştirdiğini söylemeye değer Array.
— Ferah

22

Nasıl kırpılacağını soruyorsanız (sondan öğeleri kaldırarak bir diziyi değiştirin) o zaman splice'ı kullanın :

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

Orijinali değiştirmeden bir dizinin bir alt kümesinin nasıl alınacağını soruyorsanız, dilimi kullanın .

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

Sadece splice değişikliklerini, dilim erişimlerini hatırlayın. İlk bağımsız değişken olarak negatif sayılar, dizinin sonundan itibaren dizini gösterir.




1

Bir diziden seçmeli olarak öğe çekmek istiyorsanız, jQuery.grep'i kullanabilirsiniz. yöntemini .

(jQuery belgelerinden)

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(", "));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.