MSDN mereferensikan abstraksi kumpulan Set JavaScript . Saya punya array objek yang ingin saya ubah menjadi satu set sehingga saya bisa menghapus ( .delete()
) berbagai elemen dengan nama:
var array = [
{name: "malcom", dogType: "four-legged"},
{name: "peabody", dogType: "three-legged"},
{name: "pablo", dogType: "two-legged"}
];
Bagaimana cara mengubah array ini menjadi satu set? Lebih khusus lagi, apakah mungkin melakukan ini tanpa melakukan iterasi pada larik di atas? Dokumentasinya relatif kurang (cukup untuk set yang dipakai; bukan untuk konversi - jika memungkinkan).
Saya mungkin juga berpikir tentang konversi ke a Peta , untuk dihapus dengan kunci. Apa yang saya coba capai adalah koleksi iterable yang dapat diakses atau dimodifikasi melalui akses elemen terutama melalui kunci (sebagai lawan indeks).
Konversi dari larik ke larik menjadi tujuan akhir.
javascript
arrays
set
Thomas
sumber
sumber
{"bob", "dole"}
bukan objek yang valid.Set
danMap
merupakan implementasi "murni" dari konstruksi data yang tidak mengalami masalah yangObject
dapat ditambahkan ke prototipe.Jawaban:
Cukup berikan array ke konstruktor Set. Konstruktor Set menerima
iterable
parameter. Objek Array mengimplementasikaniterable
protokol, jadi itu adalah parameter yang valid.var arr = [55, 44, 65]; var set = new Set(arr); console.log(set.size === arr.length); console.log(set.has(65));
Lihat disini
sumber
Jika Anda memulai dengan:
let array = [ {name: "malcom", dogType: "four-legged"}, {name: "peabody", dogType: "three-legged"}, {name: "pablo", dogType: "two-legged"} ];
Dan Anda menginginkan sekumpulan, katakanlah, nama, Anda akan melakukan:
let namesSet = new Set(array.map(item => item.name));
sumber
Apa yang dikatakan levi tentang meneruskannya ke konstruktor benar, tetapi Anda juga bisa menggunakan objek.
Saya pikir apa yang Veverke coba katakan adalah Anda dapat dengan mudah menggunakan
delete
kata kunci pada suatu objek untuk mencapai efek yang sama.Saya pikir Anda bingung dengan terminologi; properti adalah komponen dari objek yang dapat Anda gunakan sebagai indeks bernama (jika Anda ingin menganggapnya seperti itu).
Coba sesuatu seperti ini:
var obj = { "bob": "dole", "mr.": "peabody", "darkwing": "duck" };
Kemudian, Anda bisa melakukan ini:
delete obj["bob"];
Struktur objeknya akan seperti ini:
{ "mr.": "peabody", "darkwing": "duck" }
Yang memiliki efek yang sama.
sumber
Menurut definisi "Himpunan adalah kumpulan nilai, di mana setiap nilai hanya dapat muncul sekali." Jadi, jika array Anda memiliki nilai berulang, maka hanya satu nilai di antara nilai berulang yang akan ditambahkan ke Set Anda.
var arr = [1, 2, 3]; var set = new Set(arr); console.log(set); // {1,2,3} var arr = [1, 2, 1]; var set = new Set(arr); console.log(set); // {1,2}
Jadi, jangan convert to set jika Anda memiliki nilai berulang dalam array Anda.
sumber