Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于现有对象创建新的对象数组,无重复_Javascript_Json - Fatal编程技术网

Javascript 基于现有对象创建新的对象数组,无重复

Javascript 基于现有对象创建新的对象数组,无重复,javascript,json,Javascript,Json,我想我想要的不是什么特别的东西,我只是不知道该怎么做。我有一个对象数组- { "year": 2016, "some stuff": "bla0", "other stuff": 20 }, "year": 2017, "some stuff": "bla1", "other stuff": 21 }, "year": 2016, "some stuff": "bla2", "other stuff": 22 } 我

我想我想要的不是什么特别的东西,我只是不知道该怎么做。我有一个对象数组-

{   
    "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代码在相关的JS行上,从167开始。如果您能帮助我理清思路,我们将不胜感激。

请使用reduce函数

var数组=[{年份:2016,某些内容:bla0,其他内容:20},{年份:2017,某些内容:bla1,其他内容:21},{年份:2016,某些内容:bla2,其他内容:22}] var result=array.reducea,c=>{ 如果是[c.year]a[c.year].pushc; 否则a[c.年]=[c]; 返回a; }, {}; console.logresult; .as控制台包装{max height:100%!important;top:0;}使用函数reduce

var数组=[{年份:2016,某些内容:bla0,其他内容:20},{年份:2017,某些内容:bla1,其他内容:21},{年份:2016,某些内容:bla2,其他内容:22}] var result=array.reducea,c=>{ 如果是[c.year]a[c.year].pushc; 否则a[c.年]=[c]; 返回a; }, {}; console.logresult;
.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演示:

您想按年份对对象数组进行分组吗?您可以执行以下操作:

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演示:

var objArray=[{ 年份:2016年, 一些东西:废话, 其他资料:20 },{ 年份:2017年, 一些东西:bla1, 其他资料:21 },{ 年份:2016年, 一些东西:bla2, 其他资料:22 }]; var newObjArray={}; objArray.forEachfunctionitem{ 风险值年=项目年; 如果!newObjArray.hasOwnPropertyyear{ newObjArray[年度]=[项目]; }否则{ newObjArray[year].pushitem; } }; console.lognewObjArray var objArray=[{ 年份:2016年, 一些东西:废话, 其他资料:20 },{ 年份:2017年, 一些东西:bla1, 其他资料:21 },{ 年份:2016年, 一些东西:bla2, 其他资料:22 }]; var newObjArray={}; objArray.forEachfunctionitem{ 风险值年=项目年; 如果!newObjArray.hasOwnPropertyyear{ newObjArray[年度]=[项目]; }否则{ newObjArray[year].pushitem; } };
console.lognewObjArray 您可以使用forEach循环现有数组,并将year作为akey添加到新对象

var oldArr=[{ 年份:2016年, 一些东西:废话, 其他资料:20 }, { 年份:2017年, 一些东西:bla1, 其他资料:21 }, { 年份:2016年, 一些东西:bla2, 其他资料:22 }] var newObj={}; oldArr.forEachfunctionitem{ 如果newObj.haownPropertyItem.year{ newObj[item.year].pushitem }否则{ newObj[项目年份]=[]; newObj[item.year].pushitem } }; console.lognewObj
我想从上面创建以下对象数组。您可以使用forEach循环现有数组,并将year作为akey添加到新对象

var oldArr=[{ 年份:2016年, 一些东西:废话, 其他资料:20 }, { 年份:2017年, 一些东西:bla1, 其他资料:21 }, { 年份:2016年, 一些东西:bla2, 其他资料:22 }] var newObj={}; oldArr.forEachfunctionitem{ 如果newObj.haownPropertyItem.year{ newObj[item.year].pushitem }否则{ newObj[项目年份]=[]; newObj[item.year].pushitem } }; console.lognewObj
我想从上面创建以下对象数组。若要获得预期结果,请使用下面的“使用贴图”选项

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)

要达到预期的效果,请使用下面的使用地图选项

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)

可能创建一个新对象,然后使用迭代数组中的每个项目并检查年份-然后查看该年份是否作为属性存在于新对象中。如果不是,则为该年创建一个属性,并将数组指定为值。然后,将forEach中的当前对象推送到新对象中该属性处的数组中。另外,顺便说一句,链接到整个项目是不受欢迎的。阅读。可能创建一个新对象,然后使用迭代数组中的每个项目并检查年份-然后查看该年份是否作为属性存在于新对象中。如果不是,则为该年创建一个属性,并将数组指定为值。然后,将forEach中的当前对象推送到新对象中该属性处的数组中。另外,顺便说一句,链接到整个项目是不受欢迎的。读,太好了!谢谢你,埃莱。这正是我想要的。其他的都很好,这就是为什么我选了正确的解决方案。太好了!谢谢你,埃莱。这正是我想要的。其他的都很好,这就是为什么我投票选出了正确的解决方案。