Saya memiliki array dengan alamat siswa dan orang tua.
Sebagai contoh,
const users = [{
id: 1,
name: 'John',
email: '[email protected]',
age: 25,
parent_address: 'USA',
relationship:'mother'
},
{
id: 1,
name: 'John',
email: '[email protected]',
age: 25,
parent_address: 'Spain',
relationship:'father'
},
{
id: 2,
name: 'Mark',
email: '[email protected]',
age: 28,
parent_address: 'France',
relationship:'father'
}
];
Saya mencoba memformat ulang ini ke hasil berikut.
const list = [
{
id: 1,
name: 'John',
email: '[email protected]',
age: 25,
parent: [
{
parent_address: 'USA',
relationship:'mother'
},{
parent_address: 'Spain',
relationship:'father'
}
]
},
{
id: 2,
name: 'Mark',
email: '[email protected]',
age: 28,
parent:[
{
parent_address: 'France',
relationship:'father'
}
]
}
];
Sejauh ini saya mencoba cara berikut. Saya tidak yakin itu cara yang benar atau tidak.
const duplicateInfo = [];
for (var i = 0; i < user[0].length; i++) {
var parent = [];
if (duplicateInfo.indexOf(user[0][i].id) != -1) {
// Do duplicate stuff
} else {
// Do other
}
duplicateInfo.push(user[0][i].id);
}
javascript
arrays
kathy
sumber
sumber
parent_address
danrelationship
masuk keparent
objek, dan menggabungkan mereka ketika nama duplikat dan alamat email ditemukan.const list = []
pada awalnya, tetapi di bagian bawah Anda beralih pada daftar itu dengan mengulangiuser[0]
. Kode contoh Anda harus konsisten.Jawaban:
Salah satu pendekatan akan digunakan
.reduce()
dengan objek sebagai akumulator. Untuk setiap id, Anda dapat menyimpan objek terkait dengan array orangtua yang dapat Anda tambahkan dalam.reduce()
panggilan balik Anda setiap kali Anda menemukan objek baru dengan id yang sama. Kemudian untuk mendapatkan sebuah array dari objek dari objek Anda, Anda dapat menghubungiObject.values()
di atasnyaLihat contoh di bawah ini:
Karena Anda menyebutkan Anda baru di JS, mungkin lebih mudah untuk memahami dengan cara yang lebih penting (lihat komentar kode untuk detail):
sumber
reduce
callback itu bagus, tapi mungkin agak berat untuk pemula.Anda dapat mengurangi array dan mencari pengguna dengan id yang sama dan menambahkan informasi induk ke dalamnya.
Jika pengguna tidak ditemukan, tambahkan pengguna baru ke set hasil.
sumber
Restrukturisasi data seperti ini sangat umum dan
Array.reduce()
dirancang untuk tugas tersebut. Ini adalah cara berbeda untuk melihat sesuatu dan memerlukan waktu untuk membiasakan diri, tetapi setelah Anda menulis kode beberapa kali itu menjadi kebiasaan.reduce()
dipanggil pada array dan mengambil dua parameter:Fungsi Anda kemudian dipanggil untuk setiap elemen dengan nilai awal untuk proses pertama atau nilai kembali dari panggilan fungsi sebelumnya untuk setiap proses berikutnya, di sepanjang elemen array, indeks ke dalam array asli, dan array asli yang mengurangi () dipanggil (dua yang terakhir biasanya diabaikan dan jarang diperlukan). Itu harus mengembalikan objek atau apa pun yang Anda bangun dengan elemen saat ini ditambahkan, dan nilai pengembalian diteruskan ke panggilan berikutnya ke fungsi Anda.
Untuk hal-hal seperti ini saya biasanya memiliki objek untuk menyimpan kunci unik (
id
untuk Anda), tetapi saya melihat Anda ingin sebuah array dikembalikan. Itu satu baris untuk memetakan objek dan kunci ke array dan itu lebih efisien untuk menggunakan mekanisme properti objek built-in daripada array.find () untuk melihat apakah Anda sudah menambahkan id.sumber
Anda harus mengulang dua kali menggunakan metode saat ini. Kompleksitasnya adalah O (n ^ 2). (untuk Loop + indexOf)
Cara yang lebih baik adalah mengindeks array dan menggunakan kunci array untuk deteksi dan pencarian duplikasi.
Sebagai contoh:
sumber
sumber
Anda dapat menggunakan
Map
koleksi untuk menyimpan item unik dan cukup mengisinya menggunakanfilter
:sumber
sumber