ऐसा लगता है कि 1,2,3 आने वाला है लेकिन 3,3,3 आने पर इसे कैसे ठीक किया जाए? जावास्क्रिप्ट स्वचालित रूप से अपडेट हो रहा है

let test = [ { id: 1 } ];
let test2 = [
  { id: 1 },
  { id: 2 },
  { id: 3 }
];

let x = []

test2.forEach(i => {
  test[0].id = i.id;
  x.push(test[0])
});

console.log(x)
2
sivu 13 जुलाई 2021, 10:38

3 जवाब

सबसे बढ़िया उत्तर

चूँकि आप एक ही वस्तु को ३ बार धकेल रहे हैं और लूप के अंत में उसमें एक ही वस्तु के ३ संदर्भ होंगे अर्थात test[0]

आप सभी को कॉपी करने के लिए स्प्रेड सिंटैक्स का उपयोग कर सकते हैं वस्तु के गुण

let test = [{ id: 1 }];
let test2 = [{ id: 1 }, { id: 2 }, { id: 3 }];

let x = [];

test2.forEach((i) => {
  test[0].id = i.id;
  x.push({ ...test[0] });
});

console.log(x);
1
decpk 13 जुलाई 2021, 07:46

स्प्रेड ऑपरेटर का उपयोग करें:

x.push({ ...test[0] })

मूल रूप से आपको सरणी को उथले क्लोन करने की आवश्यकता है क्योंकि यह एक वस्तु है; forEach कॉल की शुरुआत में उसी test[0] ऑब्जेक्ट के 3 संदर्भ बनाएगा।

1
Alec 13 जुलाई 2021, 07:46

आप हर बार सरणी के समान संदर्भ में गुजर रहे हैं। आप उसी मान को भी अपडेट कर रहे हैं, यानी test[0]

तो अंत में, आपके पास तीन तत्वों के साथ एक सरणी है, सभी 3 एक ही वस्तु की ओर इशारा करते हैं जिसकी id संपत्ति जिसे आपने अंतिम मान में अपडेट किया है - test2[2].id

आप सही id प्रॉपर्टी के साथ किसी ऑब्जेक्ट में सीधे पुश कर सकते हैं। आपको एक अतिरिक्त परीक्षण सरणी की आवश्यकता नहीं होगी क्योंकि आप अपनी वस्तु बना रहे हैं और उन्हें चलते-फिरते धकेल रहे हैं।

let test = [ { id: 1 } ];
let test2 = [
  { id: 1 },
  { id: 2 },
  { id: 3 }
];

let x = []

test2.forEach(i => {
  x.push({ id : i.id })
});

console.log(x)
0
Tushar Shahi 13 जुलाई 2021, 07:51