मैं अंतिम चरण पर एक कोडवार काटा पर फंस गया हूं जहां मुझे एक सरणी के तारों को संशोधित करने और डुप्लिकेट कुंजी के मान को जोड़ने की आवश्यकता है। res=[ '(A : 200)', '(B : 250)', '(B : 890)' ] को res=[ '(A : 200)', '(B : 1140)'] में संशोधित किया जाना चाहिए

मुझे पता चला कि स्ट्रिंग के उस हिस्से का चयन कैसे करें जिसे मैं res.forEach((x, i) => { x.slice(5, -1)}) के साथ जोड़ना चाहता हूं, लेकिन मैं पूरी तरह से इस बात पर अड़ा हुआ हूं कि कैसे लिखें और जांचें कि क्या x[1] एक से अधिक बार दिखाई देता है और एक नया कैसे बनाया जाए सरणी जो उस विशिष्ट तत्व को उसके Number(string slice) के योग द्वारा पुन: असाइन करती है।

कृपया सहायता कीजिए !

0
cho_cho 29 जिंदा 2021, 20:47

1 उत्तर

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

आपको उन तारों को उनके घटकों (कुंजी/मान) में विच्छेदित करना होगा। फिर चाबियों द्वारा कुंजीबद्ध ऑब्जेक्ट बनाएं और प्रारंभ में 0 को संबंधित मान के रूप में रखें। फिर उचित कुंजी में मान जोड़ने के लिए डेटा को पुनरावृत्त करें, और अंत में उस परिणाम को अपने मूल प्रारूप में प्रारूपित करें।

बेशक, यदि आपने उन स्ट्रिंग्स को उत्पादित किया है, तो बेहतर होगा कि आप अपने परिणाम को प्रारूपित करने से पहले पहले इस तर्क को लागू करें।

let res = ['(A : 200)', '(B : 250)', '(B : 890)'];
let pairs = res.map(s => s.match(/\w+/g)); // extract the relevant info
let obj = Object.fromEntries(pairs.map(([k]) => [k, 0])); // start with 0
for (let [k, v] of pairs) obj[k] += +v; // add all values
let result = Object.entries(obj).map(([k, v]) => `(${k} : ${v})`); // format

console.log(result);

यदि आपके पास Object.fromEntries के लिए समर्थन नहीं है, तो आप Object.assign का उपयोग कर सकते हैं:

let res = ['(A : 200)', '(B : 250)', '(B : 890)'];
let pairs = res.map(s => s.match(/\w+/g)); // extract the relevant info
let obj = Object.assign(...pairs.map(([k]) => ({ [k]: 0 }))); // start with 0
for (let [k, v] of pairs) obj[k] += +v; // add all values
let result = Object.entries(obj).map(([k, v]) => `(${k} : ${v})`); // format

console.log(result);
0
trincot 29 जिंदा 2021, 22:00