簡體   English   中英

根據先前對象數組中的共享屬性創建新對象

[英]Create new objects based on shared property in previous array of objects

我有一個包含“年份”鍵和“日期”鍵的對象數組,如下所示:

    var fullDates = [
{ 'year': '2018', date: '2018-01'},
{ 'year': '2017', date: '2017-02'},
{ 'year': '2016', date: '2016-03'},
{ 'year': '2018', date: '2018-04'},
{ 'year': '2017', date: '2017-05' },
{ 'year': '2016', date: '2016-06'}
];

我想制作一個包含年份和日期的新對象數組,但其中的“日期”鍵是一個如下所示的數組。 我怎樣才能做到這一點?

var final = [
{ 'year': '2018', date: ['2018-01', '2018-02']},
{ 'year': '2017', date: ['2017-03', '2017-04']},
{ 'year': '2016', date: ['2016-04', '2016-06']}
]

您可以使用Array.reduce()操作獲取該輸出:

 var fullDates = [ { 'year': '2018', date: '2018-01'}, { 'year': '2017', date: '2017-02'}, { 'year': '2016', date: '2016-03'}, { 'year': '2018', date: '2018-04'}, { 'year': '2017', date: '2017-05' }, { 'year': '2016', date: '2016-06'} ]; var final = fullDates.reduce((acc, obj)=>{ var existingObj = acc.find(item => item.year === obj.year); if(existingObj){ existingObj.date.push(obj.date); return acc; } obj.date = [obj.date]; acc.push(obj); return acc; }, []); console.log(final); 

您可以使用array#reduce

對於每年,創建一個包含yeardates屬性的object ,並為每個重復yeararray添加date 然后從該object累加器獲取所有值。

 const fullDates = [ { 'year': '2018', date: '2018-01'}, { 'year': '2017', date: '2017-02'}, { 'year': '2016', date: '2016-03'}, { 'year': '2018', date: '2018-04'}, { 'year': '2017', date: '2017-05' }, { 'year': '2016', date: '2016-06'} ], result = Object.values(fullDates.reduce((r, {year, date}) => { r[year] = r[year] || {year, dates : []}; r[year].dates.push(date); return r; },{})); console.log(result); 

希望這可以幫助:

    var fullDates = [
{ 'year': '2018', date: '2018-01'},
{ 'year': '2017', date: '2017-02'},
{ 'year': '2016', date: '2016-03'},
{ 'year': '2018', date: '2018-04'},
{ 'year': '2017', date: '2017-05' },
{ 'year': '2016', date: '2016-06'}
];



const reducer = (accumulator, currentValue) => {

    let yearData = accumulator.find(x => x.year == currentValue.year);
    if(yearData !== undefined){
        yearData.date.push(currentValue.date);
    }
    else{
        accumulator.push({ 'year': currentValue.year, date: [currentValue.date]});
    }


    return accumulator;
}


var final = fullDates.reduce(reducer, []);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM