मान लें कि मेरे पास है:

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....

लेकिन सुनिश्चित नहीं है कि कुछ आसान तरीका है क्योंकि यहां सूचीबद्ध की तुलना में अधिक कुंजी/मान हैं।

0
Liiaam93 15 जिंदा 2022, 21:28
1
बस चाबियों पर पुनरावृति? तुमने कोशिश की?
 – 
trincot
15 जिंदा 2022, 21:30

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);
1
AlexSp3 15 जिंदा 2022, 21:34
"सबसे सुरुचिपूर्ण" राय आधारित है और प्रदर्शन के सवाल को पीछे छोड़ देता है।
 – 
mister wtf
15 जिंदा 2022, 22:40

मैं एक सहायक कार्य बनाउंगा जो पिछले उत्तरों के समान ही काफी कुछ करता है:

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)
1
maxpsz 15 जिंदा 2022, 21:53
धन्यवाद! काफी सरल लगता है। मेरे पास अन्य कारणों से पहले एक मित्र ने लॉश की सिफारिश की है, इसलिए मैं इसे नोट कर लूंगा।
 – 
Liiaam93
15 जिंदा 2022, 22:50

सबसे सरल (कोड जटिलता) समाधानों में से एक शायद एक साधारण 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 दोनों की चाबियां एक जैसी हैं।

2
3limin4t0r 15 जिंदा 2022, 23:35
धन्यवाद! मैंने शुरुआत में लूप के लिए प्रयास किया, लेकिन चूंकि मैं उन्हें इंडेक्स के माध्यम से एक्सेस नहीं कर सका, मुझे नहीं पता था कि कहां जाना है।
 – 
Liiaam93
15 जिंदा 2022, 22:45