Saya telah mencoba menggunakan pengurangan dalam javascript untuk pertama kalinya, berdasarkan artikel singkat ini: Pahami Pengurangan Array Javascript dalam 1 Menit

Saya memiliki dua objek serupa, satu memiliki 20 kunci, sementara yang lain memiliki 30 kunci, 20 di antaranya sama dengan objek pertama. Sekarang, tujuan saya adalah menggunakan reduce untuk membuat objek baru, yang akan menjadi salinan objek kedua tetapi hanya dengan 20 kunci tersebut (sehingga saya dapat membandingkan objek pertama dan kedua).

Saya menggunakan kode berikut:

const first = mapOrder(order, contactId);
const third = Object.keys(first).reduce((obj, key) => {
  obj[key] = second[key];
  return obj;
})

Jadi masalah yang saya temui adalah dengan parameter obj dari reduce. Saya akan mendapatkan kesalahan berikut: TypeError: Tidak dapat membuat properti 'nama' pada string 'id'

Tampaknya parameter obj saya sedang diinisialisasi sebagai string dengan nilai 'nama' ('id' adalah kunci pertama dari objek pertama saya).

Jadi apa yang saya lakukan, yang akhirnya memberi saya hasil yang tepat adalah sebagai berikut:

const first = mapOrder(order, contactId);
const third = Object.keys(first).reduce((obj, key) => {
  if(typeof obj == 'string'){
    obj = {}
  }
  obj[key] = second[key];
  return obj;
})

Adakah yang bisa menjelaskan kepada saya mengapa saya mengalami masalah seperti itu dan bagaimana cara memperbaikinya tanpa membuat kode saya begitu jelek? Mungkin saya melewatkan sesuatu tentang cara kerja reduce?

0
genau 14 Agustus 2017, 13:53

2 jawaban

Jawaban Terbaik

Coba ini dalam kode Anda

const first = mapOrder(order, contactId);
const third = Object.keys(first).reduce((obj, key) => {
  obj[key] = second[key];
  return obj;
}, {})

Karena sintaksnya adalah

arr.reduce(panggilan balik[, initialValue])

Untuk referensi lebih lanjut, periksa MDN

3
marvel308 14 Agustus 2017, 10:55

Anda dapat menggunakan initialValue (objek baru) untuk akumulator untuk Array#reduce.

nilai awal

[Opsional] Nilai yang akan digunakan sebagai argumen pertama untuk panggilan pertama callback. Jika tidak ada nilai awal yang diberikan, elemen pertama dalam array akan digunakan. Memanggil pengurangan pada larik kosong tanpa nilai awal adalah kesalahan.

const third = Object.keys(first).reduce((obj, key) => {
    obj[key] = second[key];
    return obj;
}, {})
// ^^
0
Community 20 Juni 2020, 09:12