[英]How to merge objects that's inside an array using native javascript
I have an api that gives me the right data, but it's mostly the same data in each object. 我有一个API,可以为我提供正确的数据,但是每个对象中的数据几乎都是相同的。 I want to restructure the objects in the array into one object.
我想将数组中的对象重组为一个对象。
This is the data that my api products currently. 这是我的api产品当前的数据。
var data = [
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Abrasives
Accessories"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Non-woven
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Bonded
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Wire Brushes"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Coated
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Specialty
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Super
Abrasives"}
];
var transformed= data.map(function(obj){
var result= {
key: obj.maincategory,
values: []
}
console.log(result)
for (var key in obj) {
if (obj.hasOwnProperty(key) && key !== "maincategory") {
result.values.push([key, obj[key]]);
}
}
return result;
});
console.log(transformed);
This is how I would like the data to be structured. 这就是我希望对数据进行结构化的方式。
var data = [
{
maincategory: "AP",
maincatname: "Abrasives",
subcatname: ['Abrasives Accessories','Non-woven Abrasives','Bonded Abrasives','Wire Brushes', etc]
},
];
You can use array#reduce
with Object.values()
. 您可以将
array#reduce
与Object.values()
。 Create an object lookup with maincategory
and add maincategory
, maincatname
and subcatname
corresponding to it and then take out values using Object.values()
from this object. 使用
maincategory
创建一个对象查找,并添加maincategory
对应的maincategory
, maincatname
和subcatname
,然后使用Object.values()
从该对象中取出值。
var data = [ {maincategory: "AP", maincatname: "Abrasives", subcatname: "Abrasives Accessories"}, {maincategory: "AP", maincatname: "Abrasives", subcatname: "Non-woven Abrasives"}, {maincategory: "AP", maincatname: "Abrasives", subcatname: "Bonded Abrasives"},{maincategory: "AP", maincatname: "Abrasives", subcatname: "Wire Brushes"}, {maincategory: "AP", maincatname: "Abrasives", subcatname: "Coated Abrasives"}, {maincategory: "AP", maincatname: "Abrasives", subcatname: "Specialty Abrasives"}, {maincategory:"AP", maincatname: "Abrasives", subcatname: "Super Abrasives"} ] result = Object.values(data.reduce((r, {maincategory, maincatname, subcatname}) => { r[maincategory] = r[maincategory] || {maincategory, maincatname, subcatname : []}; r[maincategory].subcatname.push(subcatname); return r; },{})); console.log(result);
If you are sure that it's always the same data then you can have your result by using this function: 如果确定数据始终相同,则可以使用以下函数获得结果:
function transform(data){
obj = {};
obj['maincategory'] = data[0]['maincategory'];
obj['maincatname'] = data[0]['maincatname'];
obj['subcatnames'] = data.map(function(obj){
return obj.subcatname});
return [obj]
}
To be honest the best solution is to fix the api
to return a more structured results. 老实说,最好的解决方案是修复
api
以返回更结构化的结果。
You can simply use Array.reduce
to get that output: 您可以简单地使用
Array.reduce
获得该输出:
var data = [{ maincategory: "AP", maincatname: "Abrasives", subcatname: "Abrasives Accessories" }, { maincategory: "AP", maincatname: "Abrasives", subcatname: "Non-woven Abrasives" }, { maincategory: "AP", maincatname: "Abrasives", subcatname: "Bonded Abrasives" }, { maincategory: "AP", maincatname: "Abrasives", subcatname: "Wire Brushes" }, { maincategory: "AP", maincatname: "Abrasives", subcatname: "Coated Abrasives" }, { maincategory: "AP", maincatname: "Abrasives", subcatname: "Specialty Abrasives" }, { maincategory: "AP", maincatname: "Abrasives", subcatname: "Super Abrasives" }] const r = data.reduce((r,c) => (r.subcatname = [...Array.isArray(r.subcatname) ? r.subcatname : [r.subcatname], c.subcatname], r)) console.log(r)
The idea is since you only need the subcatname
to be combined you can just use the Array.reduce
and its basic form where it essentially acts as a merge
. 这个想法是因为您只需
subcatname
组合在一起,就可以使用Array.reduce
及其基本形式(实际上它充当merge
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.