Kunci a dan b semuanya sama
diffObject(a, b) {
let before = [], after = []
Object.keys(a).forEach(key => {
if (a[key] !== b[key]) {
before.push({ ??? }) // 这里应该怎么写,{key: a[key]},但key不能是变量啊
after.push({ ??? })
}
})
return [before, after]
}
Atau adakah cara yang lebih baik, lebih cekap, lebih hebat?
Kesan yang saya nak capai ni
const ob1 = {
name: '辣条',
color: '绿色',
length: 10,
}
const ob2 = {
name: '辣条',
color: '黄色',
length: 12,
}
const diff = diffObject(ob1, ob2)
console.log('diff[0]:', diff[0])
console.log('diff[1]:', diff[1])
// diff[0]: [{color: '绿色'}, {length: 10,}]
// diff[1]: [{color: '黄色'}, {length: 12,}]
Punca masalah ini ialah cara menggunakan pembolehubah sebagai kunci semasa mengisytiharkan objek.
ES6 membenarkan literal digunakan semasa mentakrifkan objek, menggunakan
表达式
sebagai nama sifat objekJawapan selepas mengubah suai huraian soalan
Jika pembolehubah ialah rentetan atau nombor
Jika pembolehubah ialah objek
Maka kita perlu menggunakan Peta ES6
Lihat kod. Ia adalah superset daripada kaedah sebelumnya
ScreenShotKaedah penulisan baharu
ScreenShotreduce
Sebelum pengubahsuaian
Sebenarnya soalan anda berpunca kepada
soalan ini:
kunci akan dihuraikan menjadi rentetan
Berikut adalah hasil perbincangan"key"
dan pembolehubah yang dijangkakan ialahkey
, contohnyakey="abc",value="123"
"key"
,期望是变量key
例当key="abc",value="123"
上述实际变成
{"key":"123"}
应该是{"abc":"123"}
最直接的答案是
var o = {}; o[key] = value; ret.push(o);
Yang di atas sebenarnya menjadi{"key":"123"}
dan sepatutnya menjadi{"abc":"123"}
Jawapan paling langsung ialah var o = {}; o[key] = value; ret.push(o);
Mengenai penyelesaian yang mana untuk dipilih, saya berharap untuk menimbangnya berdasarkan kesederhanaan, prestasi dan kebolehbacaan Orang yang berbeza mempunyai pendapat yang berbeza
Ini adalah ringkasan perbincangan dalam kumpulan QQ Saya hanyalah seorang kuli.ES6 menyokong sifat objek sebagai pembolehubah, kaedah penulisan ialah:
Dalam parameter tolak anda, hanya gunakan kaedah penulisan ini.