Jika saya memiliki array objek berikut:
[ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]
Apakah ada cara untuk loop melalui array untuk memeriksa apakah nilai nama pengguna tertentu sudah ada dan jika tidak melakukan apa-apa, tetapi jika itu tidak menambahkan objek baru ke array dengan nama pengguna tersebut (dan ID baru)?
Terima kasih!
id
? Apakah mungkin elemen akan dihapus dari array ini, atau dapatkah kita yakin bahwa elemen baru akan selaluid
sama denganarr.length + 1
?Jawaban:
Saya berasumsi bahwa
id
s dimaksudkan untuk menjadi unik di sini.some
adalah fungsi yang bagus untuk memeriksa keberadaan hal-hal dalam array:sumber
some
tidak kembali boolean.found
akan menjaditrue
ataufalse
tergantung pada apakah kondisi dalam panggilan balik terpenuhi.if (arr.some(function (el) { return el.Id == someId; })) { // do something }
. Jangan lupa itureturn
atau Anda tidak akan mendapatkan apa pun kembali.Agak sepele untuk memeriksa nama pengguna yang ada:
Tetapi tidak begitu jelas apa yang harus dilakukan ketika Anda harus menambahkan pengguna baru ke array ini. Jalan keluar termudah - hanya mendorong elemen baru yang
id
sama denganarray.length + 1
:Ini akan menjamin keunikan ID, tetapi akan membuat array ini terlihat sedikit aneh jika beberapa elemen akan dihapus.
sumber
Cuplikan kecil ini bekerja untuk saya ..
sumber
.some
ditemukan di sini - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Saya pikir, ini adalah cara terpendek untuk mengatasi masalah ini. Di sini saya telah menggunakan fungsi panah ES6 dengan .filter untuk memeriksa keberadaan nama pengguna yang baru ditambahkan.
Tautan ke Fiddle
sumber
Inilah yang saya lakukan selain jawaban @ sagar-gavhane
sumber
...
if(userExists) { const userId = userExists.id return userId; }
...
Jawaban yang diterima juga dapat ditulis dengan cara berikut menggunakan fungsi panah pada .some
sumber
Saya suka jawaban Andy, tetapi id tidak harus unik, jadi inilah yang saya buat untuk membuat ID unik juga. Dapat diperiksa di jsfiddle juga. Harap dicatat bahwa
arr.length + 1
mungkin tidak menjamin ID unik jika ada sesuatu yang telah dihapus sebelumnya.sumber
Anda dapat membuat prototipe array Anda untuk membuatnya lebih modular, coba sesuatu seperti ini
Dan Anda dapat menggunakannya sebagai:
sumber
Saya memang mencoba langkah-langkah di atas untuk beberapa alasan itu kelihatannya tidak bekerja untuk saya, tetapi ini adalah solusi terakhir saya untuk masalah saya sendiri mungkin hanya membantu untuk satu orang yang membaca ini:
di sini post.likes adalah susunan pengguna yang menyukai pos.
sumber
coba ini
Metode pertama menggunakan beberapa
Metode kedua menggunakan meliputi, peta
sumber
Mari kita asumsikan kita memiliki array objek dan Anda ingin memeriksa apakah nilai nama didefinisikan seperti ini,
sumber
Berikut adalah rantai metode ES6 menggunakan
.map()
dan.includes()
:sumber
Fungsi asli array terkadang 3X - 5X kali lebih lambat dari loop normal. Plus fungsi asli tidak akan berfungsi di semua browser sehingga ada masalah kompatibilitas.
Kode Saya:
Dengan cara ini Anda dapat mencapai hasil lebih cepat.
Catatan: Saya belum memeriksa apakah parameter yang dikirimkan kosong atau tidak, jika mau, Anda dapat memberi tanda centang atau menulis ekspresi reguler untuk validasi tertentu.
sumber
xorWith
di Lodash dapat digunakan untuk mencapai inisumber
Lihat di sini:
https://stackoverflow.com/a/53644664/1084987
Anda dapat membuat sesuatu seperti jika kondisi sesudahnya, seperti
sumber
function number_present_or_not () {
var arr = [ 2,5,9,67,78,8,454,4,6,79,64,688 ] ;
var found = 6; var found_two; untuk (i = 0; isumber
Praktik Terbaik adalah seperti ini.
sumber