JavaScript Dizi eki vs dilim


195

Arasındaki fark nedir spliceve slice?

$scope.participantForms.splice(index, 1);
$scope.participantForms.slice(index, 1);

2
Splice ve Slice, özellikle AngularJS komutları değil, yerleşik Javascript komutlarıdır. Dilim dizi öğelerini "başlangıç" ile "bitiş" belirteçlerinin hemen öncesine kadar döndürür. Ekleme, gerçek diziyi değiştirir ve "başlangıçta" başlar ve belirtilen öğe sayısını tutar. Google bu konuda çok fazla bilgiye sahip, sadece ara.
mrunion

1
Bu aswer'ın size yardımcı olup olmadığını kontrol edin stackoverflow.com/questions/1777705/…
Fábio Luiz

Splice () yöntemleri, diziye ekleyerek veya bir diziden kaldırarak diziyi değiştirir ve yalnızca kaldırılan öğeleri döndürür.
Shaik Md N Rasool

Yanıtlar:


266

splice()orijinal diziyi değiştirirken slice()her ikisi de dizi nesnesini döndürür.

Aşağıdaki örneklere bakın:

var array=[1,2,3,4,5];
console.log(array.splice(2));

Bu geri dönecek [3,4,5]. Orijinal dizi etkilenir sonuçlanan arrayolmak [1,2].

var array=[1,2,3,4,5]
console.log(array.slice(2));

Bu geri dönecek [3,4,5]. Orijinal dizi etkilenen DEĞİLDİR sonuçlanan ile arrayvarlık [1,2,3,4,5].

Aşağıda bunu doğrulayan basit bir keman var:

//splice
var array=[1,2,3,4,5];
console.log(array.splice(2));

//slice
var array2=[1,2,3,4,5]
console.log(array2.slice(2));


console.log("----after-----");
console.log(array);
console.log(array2);


20
Dilim () dizi yönteminin, herhangi bir argüman arr1 = arr0.slice()
Mg Gm

3
Sizden splicevergi alan bir hükümet gibi düşünebilirsiniz . Oysa slicedaha çok kopyala yapıştır bir adam.
radbyx

.splice()olduğu son derece , sadece orijinal diziye referanslar dönen neden anlamaya çalışıyorum yaş unintuitive harcanan undefinedbu konu bulana kadar.
Nixinova

61

Splice ve Slice, Javascript Array işlevleridir.

Splice vs Dilim

  1. Splice () yöntemi, bir dizideki kaldırılan öğeleri / öğeleri döndürür ve slice () yöntemi, bir dizideki seçili öğeleri yeni bir dizi nesnesi olarak döndürür.

  2. Splice () yöntemi orijinal diziyi değiştirir ve slice () yöntemi orijinal diziyi değiştirmez.

  3. Splice () yöntemi n sayıda bağımsız değişken alabilir ve slice () yöntemi 2 bağımsız değişken alır.

Örnek ile ekleme

Argüman 1: Dizin, Gerekli. Hangi konuma öğe ekleneceğini / kaldırılacağını belirten bir tamsayı, Dizinin sonundaki konumu belirtmek için negatif değerleri kullanın.

Tartışma 2: İsteğe bağlı. Kaldırılacak öğe sayısı. 0 (sıfır) olarak ayarlanırsa, hiçbir öğe kaldırılmaz. Ve geçilmezse, sağlanan dizinden tüm öğeler kaldırılır.

Argüman 3… n: İsteğe bağlı. Diziye eklenecek yeni öğeler.

var array=[1,2,3,4,5];
console.log(array.splice(2));
// shows [3, 4, 5], returned removed item(s) as a new array object.
 
console.log(array);
// shows [1, 2], original array altered.
 
var array2=[6,7,8,9,0];
console.log(array2.splice(2,1));
// shows [8]
 
console.log(array2.splice(2,0));
//shows [] , as no item(s) removed.
 
console.log(array2);
// shows [6,7,9,0]

Örnek Dilim

Tartışma 1: Gerekli. Seçimin nerede başlatılacağını belirten bir tam sayı (İlk öğenin dizini 0'dır). Bir dizinin sonundan seçim yapmak için negatif sayılar kullanın.

Tartışma 2: İsteğe bağlı. Seçimin nerede biteceğini belirten ancak içermeyen bir tam sayı. Atlanırsa, dizinin başlangıç ​​konumundan sonuna kadar tüm öğeler seçilecektir. Bir dizinin sonundan seçim yapmak için negatif sayılar kullanın.

var array=[1,2,3,4,5]
console.log(array.slice(2));
// shows [3, 4, 5], returned selected element(s).
 
console.log(array.slice(-2));
// shows [4, 5], returned selected element(s).
console.log(array);
// shows [1, 2, 3, 4, 5], original array remains intact.
 
var array2=[6,7,8,9,0];
console.log(array2.slice(2,4));
// shows [8, 9]
 
console.log(array2.slice(-2,4));
// shows [9]
 
console.log(array2.slice(-3,-1));
// shows [8, 9]
 
console.log(array2);
// shows [6, 7, 8, 9, 0]


3
Her iki işlev de farklı görevler yerine getirse de, aksine splice(x,y), slice(x,y)ikinci argüman yx konumundan değil, dizinin ilk öğesinden sayılır.
Ramesh Pareek

Bir şey daha ben kaydetti: yerine array.slice(index, count)kullanırsanız, array.slice((index, count)), sen 'dilimleme' sonra kalan kısmını alacak. Dene!
Ramesh Pareek

23

Dilim () yöntemi, yeni bir dizi nesnesine dizisinin bir kısmının bir kopyası döndürür.

$scope.participantForms.slice(index, 1);

Bu mu DEĞİL değiştirmek participantFormsdizi ama bulunan tek eleman içeren yeni bir dizi döndürür indexorijinal dizideki pozisyon.

Ek yeri () metodu varolan öğeleri çıkarılması ve / veya yeni elemanları eklenerek bir dizi içeriğini değiştirir.

$scope.participantForms.splice(index, 1);

Böylece konumdaki participantFormsdiziden bir öğe kaldırılır index.

Bunlar Javascript yerel fonksiyonları, AngularJS'nin onlarla hiçbir ilgisi yoktur.


Herkes yararlı örnekler verebilir ve her biri için ideal ne olabilir? Ekleme veya dilim kullanmayı tercih ettiğiniz durumlar gibi mi?
petrosmm

1
bu cevap kısmen yanlış. için splice2. arg dönüş dizideki elementlerin sayısı, ancak için slice2. arg geri + 1 nihai elemanın endeksidir slice(index,1)zorunlu bir elemanın başlayan bir dizi döndürmez index. [1,2,3,4,5].slice(0,1)döner [1]fakat [1,2,3,4,5].slice(3,1)döner []çünkü 1olarak yorumlanır final index +1böylece final index = 0ancak bu öncedir start index = 3öylesine boş dizi döndürülür.
BaltoStar

Bu neden en iyi cevap değil?
JJ Labajo

23

İşte slicevs arasındaki farkı hatırlamak için basit bir hilesplice

var a=['j','u','r','g','e','n'];

// array.slice(startIndex, endIndex)
a.slice(2,3);
// => ["r"]

//array.splice(startIndex, deleteCount)
a.splice(2,3);
// => ["r","g","e"]

Trick to remember:

"spl" (first 3 letters of splice)"Belirli uzunluk" için kısa olarak düşünün , ikinci argümanın bir dizin değil bir uzunluk olması gerektiğini düşünün


1
Argümanları nasıl belirttiğinizden daha fazlası. Bunlardan biri (ekleme) temel diziyi değiştirir, diğeri değiştirmez.
Hakem

ayrıca

14

Splice - MDN referansı - ECMA-262 spesifikasyonu

Sözdizimi
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

Parametreler

  • start: gereklidir. İlk dizin.
    Eğer startbu şekilde muamele edilir negatif "Math.max((array.length + start), 0)"ucundan etkili bir spec (aşağıda verilen örnek) göre array.
  • deleteCount: isteğe bağlı. Kaldırılacak öğe sayısı (tümü startsağlanmamışsa).
  • item1, item2, ...: isteğe bağlı. Dizinden startdizinden eklenecek öğeler .

Döndürür : Öğeleri silinen bir dizi (hiçbiri kaldırılmadıysa boş dizi)

Orijinal diziyi değiştir : Evet

Örnekler:

const array = [1,2,3,4,5];

// Remove first element
console.log('Elements deleted:', array.splice(0, 1), 'mutated array:', array);
// Elements deleted: [ 1 ] mutated array: [ 2, 3, 4, 5 ]

// array = [ 2, 3, 4, 5]
// Remove last element (start -> array.length+start = 3)
console.log('Elements deleted:', array.splice(-1, 1), 'mutated array:', array);
// Elements deleted: [ 5 ] mutated array: [ 2, 3, 4 ]

MDN Splice örneklerinde daha fazla örnek


Dilim - MDN referansı - ECMA-262 spec

Sözdizimi
array.slice([begin[, end]])
Parametreleri

  • begin: isteğe bağlı. Başlangıç ​​dizini (varsayılan 0).
    Eğer beginbu şekilde muamele edilir negatif "Math.max((array.length + begin), 0)"ucundan etkili bir spec (aşağıda verilen örnek) göre array.
  • end: isteğe bağlı. Çıkarma için son dizin ancak dahil değil (varsayılan array.length). Eğer endbu şekilde muamele edilir negatif "Math.max((array.length + begin),0)"ucundan etkili bir spec (aşağıda verilen örnek) göre array.

Döndürür : Çıkarılan öğeleri içeren bir dizi.

Orijinali değiştir : Hayır

Örnekler:

const array = [1,2,3,4,5];

// Extract first element
console.log('Elements extracted:', array.slice(0, 1), 'array:', array);
// Elements extracted: [ 1 ] array: [ 1, 2, 3, 4, 5 ]

// Extract last element (start -> array.length+start = 4)
console.log('Elements extracted:', array.slice(-1), 'array:', array);
// Elements extracted: [ 5 ] array: [ 1, 2, 3, 4, 5 ]

MDN Slice örneklerinde daha fazla örnek

Performans karşılaştırması

Bunu her birinin senaryosuna bağlı olarak diğerinden daha iyi performans gösterebileceği için mutlak gerçek olarak kabul etmeyin.
Performans testi


12

Splice ve Slice, özellikle AngularJS komutları değil, yerleşik Javascript komutlarıdır. Dilim dizi öğelerini "başlangıç" ile "bitiş" belirteçlerinin hemen öncesine kadar döndürür. Ekleme, gerçek diziyi değiştirir ve "başlangıçta" başlar ve belirtilen öğe sayısını tutar. Google bu konuda çok fazla bilgiye sahip, sadece ara.


2
Splice , belirtilen sayıyı siler ve ardından gelen bağımsız değişkenleri ekler.
Josiah Keller

splice, belirli bir başlangıç ​​indeksinden belirli sayıda elementi siler, örn. splice (4,1); indeks 4'ten başlayarak bir elemanı silerken ekleme (4,3); Dizin 4'teki öğeden başlayarak üç öğeyi siler. Silindikten sonra silinen değerleri döndürür.
briancollins081

8

splice()Yöntem, bir dizi kaldırılan ürün verir. slice()Yeni bir dizi nesne olarak bir dizi yöntem, döner seçilen element (ler).

splice()Yöntem orijinal diziyi değiştirir ve slice()yöntem orijinal diziyi değiştirmez.

  • Splice() yöntemi n sayıda bağımsız değişken alabilir:

    Argüman 1: Dizin, Gerekli.

    Tartışma 2: İsteğe bağlı. Kaldırılacak öğe sayısı. 0 (sıfır) olarak ayarlanırsa, hiçbir öğe kaldırılmaz. Ve geçilmezse, sağlanan dizinden tüm öğeler kaldırılır.

    Argüman 3..n: İsteğe bağlı. Diziye eklenecek yeni öğeler.

  • slice() yöntemi 2 argüman alabilir:

    Tartışma 1: Gerekli. Seçimin nerede başlatılacağını belirten bir tamsayı (İlk öğenin dizini 0'dır). Bir dizinin sonundan seçim yapmak için negatif sayılar kullanın.

    Tartışma 2: İsteğe bağlı. Seçimin nerede biteceğini belirten bir tam sayı. Atlanırsa, dizinin başlangıç ​​konumundan sonuna kadar tüm öğeler seçilir. Bir dizinin sonundan seçim yapmak için negatif sayılar kullanın.


4

Dizi öğesini dizine göre ekleme ve silme

dizin = 2

//splice & will modify the origin array
const arr1 = [1,2,3,4,5];
//slice & won't modify the origin array
const arr2 = [1,2,3,4,5]

console.log("----before-----");
console.log(arr1.splice(2, 1));
console.log(arr2.slice(2, 1));

console.log("----after-----");
console.log(arr1);
console.log(arr2);

let log = console.log;

//splice & will modify the origin array
const arr1 = [1,2,3,4,5];

//slice & won't modify the origin array
const arr2 = [1,2,3,4,5]

log("----before-----");
log(arr1.splice(2, 1));
log(arr2.slice(2, 1));

log("----after-----");
log(arr1);
log(arr2);

resim açıklamasını buraya girin


3

Başka bir örnek:

[2,4,8].splice(1, 2) -> returns [4, 8], original array is [2]

[2,4,8].slice(1, 2) -> returns 4, original array is [2,4,8]

3

dilim orijinal diziyi değiştirmez, yeni dizi döndürür ancak splice orijinal diziyi değiştirir.

example: var arr = [1,2,3,4,5,6,7,8];
         arr.slice(1,3); // output [2,3] and original array remain same.
         arr.splice(1,3); // output [2,3,4] and original array changed to [1,5,6,7,8].

ekleme yöntemi ikinci argüman dilim yönteminden farklıdır. ekteki ikinci argüman kaldırılacak eleman sayısını ve dilimde son endeksi temsil eder.

arr.splice(-3,-1); // output [] second argument value should be greater then 
0.
arr.splice(-3,-1); // output [6,7] index in minus represent start from last.

-1 son elemanı temsil eder, böylece -3 ile -1 arasında başlar. Yukarıda ekleme ve dilim yöntemi arasındaki büyük fark vardır.


2

//splice
var array=[1,2,3,4,5];
console.log(array.splice(2));

//slice
var array2=[1,2,3,4,5]
console.log(array2.slice(2));


console.log("----after-----");
console.log(array);
console.log(array2);


Lütfen neler olduğu hakkında daha fazla bilgi verin
MKant

2

Slice () ve Splice () javascript yerleşik işlevleri arasındaki fark, Slice kaldırılan öğeyi döndürür ancak orijinal diziyi değiştirmez; sevmek,

        // (original Array)
        let array=[1,2,3,4,5] 
        let index= array.indexOf(4)
         // index=3
        let result=array.slice(index)
        // result=4  
        // after slicing=>  array =[1,2,3,4,5]  (same as original array)

ancak splice () durumunda orijinal diziyi etkiler; sevmek,

         // (original Array)
        let array=[1,2,3,4,5] 
        let index= array.indexOf(4)
         // index=3
        let result=array.splice(index)
        // result=4  
        // after splicing array =[1,2,3,5]  (splicing affects original array)

0

JavaScript Array splice () Yöntemi Örnek Olarak

Örnek 1 tutsmake tarafından -Dizin 1'den 2 öğe kaldır

  var arr = [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ]; 

 arr.splice(1,2);

 console.log( arr ); 

Örnek-2 Tutsmake tarafından - Dizin 0'dan yeni öğe ekle JavaScript

  var arr = [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ]; 

 arr.splice(0,0,"zero");

 console.log( arr );  

Örnek-3 by tutsmake - Dizi JavaScript'e Eleman Ekle ve Kaldır

var months = ['Jan', 'March', 'April', 'June'];

months.splice(1, 0, 'Feb'); // add at index 1

console.log(months); 

months.splice(4, 1, 'May'); // replaces 1 element at index 4

console.log(months);

https://www.tutsmake.com/javascript-array-splice-method-by-example/

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.