मेरे पास एक समान वस्तु संरचना है .. मेरा उद्देश्य उसी वर्ष द्वारा समूहीकृत समान संपत्ति का योग करना है (जैसे 2016 --> importo1: 7500, importo2: 0, importo3: 0, importo4: 3000)

{
  index: 0,
  annoDelibera: 2020,
  importo1: 2500,
  importo2: 3000,
  importo3: 0,
  importo4: 2000
},
{
  index: 1,
  annoDelibera: 2019,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 2,
  annoDelibera: 2016,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 3,
  annoDelibera: 2016,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 4,
  annoDelibera: 2016,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 5,
  annoDelibera: 2015,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 6,
  annoDelibera: 2014,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 7,
  annoDelibera: 2014,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
}

ऐसा करने का तरीका क्या है? मेरी समस्या यह है कि मैं योग करने की कोशिश करता हूं, यह साल के हिसाब से सभी संपत्ति का योग है, न कि एक भी संपत्ति

getSumGrouped(year) {
    let holder = {};
    let sum = =;
    for (let entry of this.config.fields) {
         for (let row of this.data) {
              if (holder.hasOwnProperty(row.annoDelibera) && holder.hasOwnProperty(entry.name)) {
                if(year == row.annoDelibera){
                  sum += Number(row[entry.name]);
                  holder[row.annoDelibera] = holder[row.annoDelibera] + sum;
                }

              } 
              else {
                if(year == row.annoDelibera){
                  sum += Number(row[entry.name]);
                  holder[row.annoDelibera] = sum;
                }
              }

            }
        fields.push({ style: { ...entry.style, ...entry.cellStyle }, value: holder[year] });
    }
}

मैंने इस तरह से कोशिश की, this.config.fields मुझे एक ही नाम की संपत्ति देता है लेकिन दूसरे हिस्से से आता है। और this.data ऊपर दी गई वस्तु संरचना डेटा है।

0
travis_911 27 फरवरी 2020, 12:09
1
कृपया अपना प्रयास जोड़ें।
 – 
Nina Scholz
27 फरवरी 2020, 12:10
"javascript group array of Objects" खोज के परिणाम से आपको अपने लक्ष्य को प्राप्त करने के लिए पर्याप्त उत्तर मिल सकते हैं।
 – 
Andreas
27 फरवरी 2020, 12:17
1
अपने प्रयास में आप संभवतः कुछ गलत कर रहे हैं - अपना प्रयास दिखाकर और अपनी गलती को इंगित करके, आप और भी बहुत कुछ सीखेंगे
 – 
Jaromanda X
27 फरवरी 2020, 12:17
मैंने अपने प्रयास से प्रश्न संपादित किया
 – 
travis_911
27 फरवरी 2020, 12:24

5 जवाब

कोई भी दृष्टिकोण मदद करेगा लेकिन मैं इसे कुछ चरणों में हल करूंगा:

const yearSum = yourObject.reduce((actuator, object) => {
  // if we have an index, do addition otherwise set current object as value
  if (actuator[object.annoDelibera]) {
    actuator[object.annoDelibera].importo1 += object.importo1;
    actuator[object.annoDelibera].importo2 += object.importo2
    actuator[object.annoDelibera].importo3 += object.importo3
    actuator[object.annoDelibera].importo4 += object.importo4
  } else {
    // strip index and year from values (can be omitted but is dirty if not as you'll have the index etc. for the total
    const {index, annoDelibera, ...rest} = object;
    actuator[object.annoDelibera] = rest;
  }
  return actuator; // return for next reduce loop
}, {});

कम करने में आप बहुत सी चीजें कर सकते हैं, इंपोर्टो 1 को सेट करने वाली 4 लाइनें किसी भी कुंजी को अनुमति देने के लिए स्थापित की जा सकती हैं और आप अन्य स्टेटमेंट से डिकंस्ट्रक्शन पैटर्न का उपयोग कर सकते हैं ताकि वर्षों का योग न हो और इंडेक्स अगर यह एक लूप है चांबियाँ।

विकल्प

const yearSum = yourObject.reduce((actuator, object) => {
    // strip index and year from values (can be omitted but is dirty if not as you'll have the index etc. for the total
  const {index, annoDelibera, ...rest} = object;
  // if we have an index, do addition otherwise set current object as value
  if (actuator[object.annoDelibera]) {
    Object.keys(rest).forEach(key => {
      actuator[object.annoDelibera][key] += rest[key];
    }
  } else {
    actuator[object.annoDelibera] = rest;
  }
  return actuator; // return for next reduce loop
}, {});

उत्तरार्द्ध अधिक गतिशील है, लेकिन संभवतः आवश्यकता नहीं है, मैं स्पष्ट चर का उपयोग करता हूं लेकिन मुझे नहीं पता कि आपकी वस्तु किस बारे में है!

1
Community 20 जून 2020, 12:12

आप उसी वर्ष ढूंढ सकते हैं और एक नई वस्तु बना सकते हैं या वांछित गुणों को अपडेट कर सकते हैं।

var data = [{ index: 0, annoDelibera: 2020, importo1: 2500, importo2: 3000, importo3: 0, importo4: 2000 }, { index: 1, annoDelibera: 2019, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 2, annoDelibera: 2016, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 3, annoDelibera: 2016, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 4, annoDelibera: 2016, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 5, annoDelibera: 2015, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 6, annoDelibera: 2014, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 7, annoDelibera: 2014, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }],
    grouped = data.reduce((r, { index, annoDelibera, ...o }) => {
        var temp = r.find(q => q.annoDelibera === annoDelibera);
        if (temp) Object.entries(o).forEach(([k, v]) => temp[k] += v);
        else r.push(temp = { annoDelibera, ...o });
        return r;
    }, []);
    

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
Nina Scholz 27 फरवरी 2020, 12:35

ये कोशिश करें

const data = [ { index: 0, annoDelibera: 2020, importo1: 2500, importo2: 3000, importo3: 0, importo4: 2000 }, { index: 1, annoDelibera: 2019, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 2, annoDelibera: 2016, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 3, annoDelibera: 2016, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 4, annoDelibera: 2016, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 5, annoDelibera: 2015, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 6, annoDelibera: 2014, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 }, { index: 7, annoDelibera: 2014, importo1: 2500, importo2: 0, importo3: 0, importo4: 1000 } ]

const result = data.reduce(function(res, obj) {
    if (!(obj.annoDelibera in res)){
        const { index, annoDelibera, ...r } = obj;
        res.arr.push(res[obj.annoDelibera] = r);
    }
    else {
        res[obj.annoDelibera].importo1 += obj.importo1;
        res[obj.annoDelibera].importo2 += obj.importo2;
        res[obj.annoDelibera].importo3 += obj.importo3;
        res[obj.annoDelibera].importo4 += obj.importo4;
    }
    return res;
}, {arr:[]})

console.log(result)
1
Ghoul Ahmed 27 फरवरी 2020, 12:55

अंडरस्कोर लाइब्रेरी फ़्यूज़न का उपयोग करें:

_।द्वारा समूह बनाएं

और बाद में आप प्रत्येक समूह में मदों का योग कर सकते हैं। उत्तर दें यदि आपने यह काम नहीं किया।

0
Tech Solver 27 फरवरी 2020, 12:21

जरूरी नहीं कि सबसे साफ तरीका हो लेकिन बिना किसी अतिरिक्त पुस्तकालयों के जो आपने पूछा है उसे प्राप्त करें।

let data = [
{
  index: 0,
  annoDelibera: 2020,
  importo1: 2500,
  importo2: 3000,
  importo3: 0,
  importo4: 2000
},
{
  index: 1,
  annoDelibera: 2019,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 2,
  annoDelibera: 2016,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 3,
  annoDelibera: 2016,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 4,
  annoDelibera: 2016,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 5,
  annoDelibera: 2015,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 6,
  annoDelibera: 2014,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
},
{
  index: 7,
  annoDelibera: 2014,
  importo1: 2500,
  importo2: 0,
  importo3: 0,
  importo4: 1000
}
]

let byYear = {};

data.forEach(el => {
	if(!byYear[el.annoDelibera]) {
  	byYear[el.annoDelibera]= {
    	importo1: 0,
      importo2: 0,
      importo3: 0,
      importo4: 0
    };
  }
})

data.forEach(el => {
	byYear[el.annoDelibera].importo1 += el.importo1;
	byYear[el.annoDelibera].importo2 += el.importo2;
	byYear[el.annoDelibera].importo3 += el.importo3;
	byYear[el.annoDelibera].importo4 += el.importo4;
})

console.log(byYear);
0
amcquaid 27 फरवरी 2020, 12:24