簡體   English   中英

從現有對象創建新對象數組,不重復

[英]Creating a new array of objects from an existing object based no duplication

我不認為我想要什么有什么特別的,我只是不知道該怎么做。 我有一系列對象-

{   
    "year": 2016,
    "some stuff": "bla0",
    "other stuff": 20
},
    "year": 2017,
    "some stuff": "bla1",
    "other stuff": 21
},
    "year": 2016,
    "some stuff": "bla2",
    "other stuff": 22
}

我想從上面創建以下對象數組。

{
    "2016": [
        {
            "year": 2016,
            "some stuff": "bla0",
            "other stuff": 20
        },
        {
            "year": 2016,
            "some stuff": "bla2",
            "other stuff": 22
        }
    ],
    "2017": [
        {
            "year": 2017,
            "some stuff": "bla1",
            "other stuff": 21
        }
    ]
}

我當前的WIP代碼位於https://codepen.io/sharperwebdev/pen/aqQQZy/?editors=1011相關的JS行,從167開始。希望我對此有所思考的任何幫助。

使用功能reduce

 var array = [{ "year": 2016, "some stuff": "bla0", "other stuff": 20 }, { "year": 2017, "some stuff": "bla1", "other stuff": 21 }, { "year": 2016, "some stuff": "bla2", "other stuff": 22 }] var result = array.reduce((a, c) => { if (a[c.year]) a[c.year].push(c); else a[c.year] = [c]; return a; }, {}); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您想按年份對對象數組進行分組? 您可以執行以下操作:

const data = [{   
  "year": 2016,
  "some stuff": "bla0",
  "other stuff": 20
}, {
  "year": 2017,
  "some stuff": "bla1",
  "other stuff": 21
}, {
  "year": 2016,
  "some stuff": "bla2",
  "other stuff": 22
}];

function groupBy(data, key) {
  return data.reduce((result, item) => {
    result[item[key]] = result[item[key]] || [];
    result[item[key]].push(item);
    return result;
  }, {});
}

groupBy(data, 'year');

jsbin演示: http ://jsbin.com/jifozivuve/edit?js,控制台

 var objArray=[{ "year": 2016, "some stuff": "bla0", "other stuff": 20 },{ "year": 2017, "some stuff": "bla1", "other stuff": 21 },{ "year": 2016, "some stuff": "bla2", "other stuff": 22 }]; var newObjArray={}; objArray.forEach(function(item){ var year=item.year; if(!newObjArray.hasOwnProperty(year)){ newObjArray[year]=[item]; }else{ newObjArray[year].push(item); } }); console.log(newObjArray); 

您可以使用forEach循環現有數組,然后將year作為關鍵字添加到新對象。

 var oldArr = [{ "year": 2016, "some stuff": "bla0", "other stuff": 20 }, { "year": 2017, "some stuff": "bla1", "other stuff": 21 }, { "year": 2016, "some stuff": "bla2", "other stuff": 22 }] var newObj = {}; oldArr.forEach(function(item) { if (newObj.hasOwnProperty(item.year)) { newObj[item.year].push(item) } else { newObj[item.year] = []; newObj[item.year].push(item) } }); console.log(newObj) 
 I want to create the following array of objects from the above. 

為了達到預期的效果,請使用以下使用地圖選項

var x = [{   
    "year": 2016,
    "some stuff": "bla0",
    "other stuff": 20
},{
    "year": 2017,
    "some stuff": "bla1",
    "other stuff": 21
},{
    "year": 2016,
    "some stuff": "bla2",
    "other stuff": 22
}]

var y =[]
x.map(function(e){
  var temp ={}
  temp[e.year] = e
  y.push(temp)
})

console.log(y)

https://codepen.io/nagasai/pen/yvZdQY

暫無
暫無

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

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