मान लें कि मेरे पास है:
object1 = {
atk: 3,
def: 6,
hp: 4,
level: 17,
};
object2 = {
atk: 1,
def: 4,
hp: 2,
level: 10,
};
मैं दो वस्तुओं को गुणा करना चाहता हूं इसलिए मैं समाप्त करता हूं
object3 = {
atk: 3, // 1 * 3
def: 24, // 4 * 6
hp: 8, // 2 * 4
level: 170, // 17 * 10
};
Saya mendapatkan beberapa perilaku yang tidak terduga. Memanggil {{X34}} pada {{X35}} dengan {{X36}} dan {{X37}} hanya menukar dua elemen pertama di kedua vektor sehingga membuat saya berpikir apa yang saya lakukan salah di sini.
let obj3 = {};
obj3.atk = object1.atk * object2.atk;
obj3.def= object1.def * object2.def;
//etc....
लेकिन सुनिश्चित नहीं है कि कुछ आसान तरीका है क्योंकि यहां सूचीबद्ध की तुलना में अधिक कुंजी/मान हैं।
3 जवाब
मुझे लगता है कि इसे करने का सबसे शानदार तरीका है reduce
सरणी विधि, Object.keys()
फ़ंक्शन, जो ऑब्जेक्ट की कुंजियों वाली एक सरणी देता है:
const object1 = { atk: 3, def: 6, hp: 4, level: 17, };
const object2 = { atk: 1, def: 4, hp: 2, level: 10 };
const object3 = Object.keys(object1).reduce((result, key) => {
result[key] = object1[key] * object2[key];
return result;
}, {});
console.log(object3);
मैं एक सहायक कार्य बनाउंगा जो पिछले उत्तरों के समान ही काफी कुछ करता है:
const multiplyObjectsByKeys = (a, b) => Object.keys(a).reduce((acc, key) => ({ ...acc, [key]: a[key] * b[key] }), {})
const object3 = multiplyObjectsByKeys(object1, object2)
यदि आप अपने प्रोजेक्ट में लॉश का उपयोग कर रहे हैं, तो आप इसे इस तरह भी कर सकते हैं:
_.assignWith(object1, object2, (a, b) => a * b)
सबसे सरल (कोड जटिलता) समाधानों में से एक शायद एक साधारण for...in
लूप, मुट्ठी वाली वस्तु की कुंजियों पर पुनरावृति।
const object1 = { atk: 3, def: 6, hp: 4, level: 17 };
const object2 = { atk: 1, def: 4, hp: 2, level: 10 };
const obj3 = {};
for (const key in object1) {
obj3[key] = object1[key] * object2[key];
}
console.log(obj3);
यह मानता है कि object1
और object2
दोनों की चाबियां एक जैसी हैं।