Pertanyaan Menghapus elemen array dalam JavaScript - hapus vs sambatan


Apa perbedaan antara menggunakan itu delete operator pada elemen array yang bertentangan dengan penggunaan itu Array.splice metode?

Sebagai contoh:

myArray = ['a', 'b', 'c', 'd'];

delete myArray[1];
//  or
myArray.splice (1, 1);

Mengapa bahkan memiliki metode sambatan jika saya dapat menghapus elemen larik seperti yang saya dapat dengan objek?


1173
2018-02-01 11:11


asal


Jawaban:


delete akan menghapus properti objek, tetapi tidak akan mengindeks ulang larik atau memperbarui durasinya. Ini membuatnya tampak seolah-olah tidak terdefinisi:

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> delete myArray[0]
  true
> myArray[0]
  undefined

Perhatikan bahwa pada kenyataannya tidak diatur ke nilai undefined, bukan properti dihapus dari array, membuatnya muncul tidak terdefinisi. Alat pengembang Chrome membuat perbedaan ini jelas dengan mencetak empty saat mencatat array.

> myArray[0]
  undefined
> myArray
  [empty, "b", "c", "d"]

myArray.splice(start, deleteCount) benar-benar menghapus elemen, mengindeks kembali larik, dan mengubah panjangnya.

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> myArray.splice(0, 2)
  ["a", "b"]
> myArray
  ["c", "d"]

1539
2018-02-01 11:16



Metode Array.remove ()

John Resig, pencipta jQuery dibuat sangat berguna Array.remove metode yang selalu saya gunakan dalam proyek saya.

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

dan inilah beberapa contoh bagaimana itu bisa digunakan:

// Remove the second item from the array
array.remove(1);
// Remove the second-to-last item from the array
array.remove(-2);
// Remove the second and third items from the array
array.remove(1,2);
// Remove the last and second-to-last items from the array
array.remove(-2,-1);

Situs web John


321
2018-03-22 00:51



Karena hapus hanya menghapus objek dari elemen dalam larik, panjang larik tidak akan berubah. Sambungan menghapus objek dan memendekkan larik.

Kode berikut akan menampilkan "a", "b", "undefined", "d"

myArray = ['a', 'b', 'c', 'd']; delete myArray[2];

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

Padahal ini akan menampilkan "a", "b", "d"

myArray = ['a', 'b', 'c', 'd']; myArray.splice(2,1);

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

95
2018-02-01 11:13



Saya tersandung ke pertanyaan ini ketika mencoba untuk memahami cara menghapus setiap kemunculan elemen dari Array. Berikut perbandingannya dari splice dan delete untuk menghapus setiap 'c' dari items Array.

var items = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];

while (items.indexOf('c') !== -1) {
  items.splice(items.indexOf('c'), 1);
}

console.log(items); // ["a", "b", "d", "a", "b", "d"]

items = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];

while (items.indexOf('c') !== -1) {
  delete items[items.indexOf('c')];
}

console.log(items); // ["a", "b", undefined, "d", "a", "b", undefined, "d"]
​

60
2018-05-09 13:25



Dari  Inti JavaScript 1.5 Referensi> Operator> Operator Khusus> hapus Operator :

Saat Anda menghapus elemen larik,   panjang larik tidak terpengaruh. Untuk   Misalnya, jika Anda menghapus [3], [4] adalah   masih [4] dan [3] tidak terdefinisi. Ini   berlaku bahkan jika Anda menghapus yang terakhir   elemen dari array (hapus   a [panjang]].


13
2018-02-01 11:16



splice akan bekerja dengan indeks numerik.

sedangkan delete dapat digunakan terhadap jenis indeks lainnya ..

contoh:

delete myArray['text1'];

9
2018-01-11 07:52



Mungkin juga perlu disebutkan bahwa sambatan hanya berfungsi pada larik. (Properti objek tidak dapat diandalkan untuk mengikuti urutan yang konsisten.)

Untuk menghapus pasangan kunci-nilai dari suatu objek, hapus sebenarnya apa yang Anda inginkan:

delete myObj.propName;     // , or:
delete myObj["propName"];  // Equivalent.

9
2017-08-01 20:11



menghapus bertindak seperti situasi dunia yang tidak nyata, itu saja menghapus item, tetapi panjang larik tetap sama:

contoh dari terminal simpul:

> var arr = ["a","b","c","d"];
> delete arr[2]
true
> arr
[ 'a', 'b', , 'd', 'e' ]

Berikut ini adalah fungsi untuk menghapus item dari array dengan indeks, menggunakan mengiris(), ia mengambil arr sebagai argumen pertama, dan indeks anggota yang ingin Anda hapus sebagai argumen kedua. Seperti yang Anda lihat, itu benar-benar menghapus anggota array, dan akan mengurangi panjang array dengan 1

function(arr,arrIndex){
    return arr.slice(0,arrIndex).concat(arr.slice(arrIndex + 1));
}

Apa fungsi di atas adalah mengambil semua anggota ke indeks, dan semua anggota setelah indeks, dan menggabungkannya bersama, dan mengembalikan hasilnya.

Berikut ini contoh menggunakan fungsi di atas sebagai modul node, melihat terminal akan berguna:

> var arr = ["a","b","c","d"]
> arr
[ 'a', 'b', 'c', 'd' ]
> arr.length
4 
> var arrayRemoveIndex = require("./lib/array_remove_index");
> var newArray = arrayRemoveIndex(arr,arr.indexOf('c'))
> newArray
[ 'a', 'b', 'd' ] // c ya later
> newArray.length
3

Harap dicatat bahwa ini tidak akan bekerja satu array dengan dupes di dalamnya, karena indexOf ("c") hanya akan mendapatkan kejadian pertama, dan hanya splice out dan menghapus "c" pertama yang ditemukannya.


7
2017-07-20 02:20



Seperti yang dinyatakan berkali-kali di atas, menggunakan splice() sepertinya sangat cocok. Dokumentasi di Mozilla:

Itu splice() metode mengubah isi array dengan menghapus elemen yang ada dan / atau menambahkan elemen baru.

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];

myFish.splice(2, 0, 'drum'); 
// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]

myFish.splice(2, 1); 
// myFish is ["angel", "clown", "mandarin", "sturgeon"]

Sintaksis

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

Parameter

mulai

Indeks untuk mulai mengubah array. Jika lebih besar dari panjang larik, indeks awal aktual akan diatur ke panjang larik. Jika negatif, akan mulai banyak elemen dari akhir.

deleteCount

Bilangan bulat yang menunjukkan jumlah elemen larik yang lama untuk dihapus. Jika deleteCount adalah 0, tidak ada elemen yang dihapus. Dalam hal ini, Anda harus menentukan setidaknya satu elemen baru. Jika deleteCount lebih besar dari jumlah elemen yang tersisa dalam array mulai saat start, maka semua elemen melalui akhir array akan dihapus.

Jika deleteCount dihilangkan, deleteCount akan sama dengan (arr.length - start).

item1, item2, ...

Unsur-unsur untuk ditambahkan ke array, dimulai pada indeks awal. Jika Anda tidak menentukan elemen apa pun, splice() hanya akan menghapus elemen dari larik.

Kembalikan nilai

Array berisi elemen yang dihapus. Jika hanya satu elemen yang dihapus, array dari satu elemen dikembalikan. Jika tidak ada elemen yang dihapus, array kosong dikembalikan.

[...]


7
2018-01-08 10:43



hapus Vs splice

saat Anda menghapus item dari larik

var arr = [1,2,3,4]; delete arr[2]; console.log(arr)
//result
[1, 2, 3:, 4]

ketika kamu sambatan

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

dalam kasus menghapus itu elemen dihapus tetapi indeks tetap kosong

sementara dalam kasus sambatan elemen dihapus dan indeks elemen istirahat berkurang


6
2017-08-06 10:42



kamu bisa menggunakan sesuatu seperti ini

var my_array = [1,2,3,4,5,6];
delete my_array[4];
console.log(my_array.filter(function(a){return typeof a !== 'undefined';}));

Harus menampilkan [1, 2, 3, 4, 6]


5
2017-11-26 12:34