У меня есть строка JSON, которая создается из API.
[{"categories":{"category":{"id":"1","Name":"furit"}}},{"categories":{"category":{"id":"2","Name":"veg"}}},{"products":{"product":{"id":"1","Name":"fruit"}}},{"products":{"product":{"id":"2","Name":"pears"}}}]
как я могу вытолкнуть все дочерние значения для своего родителя, чтобы выглядеть примерно так.
[{"categories":{"category":[{"id":"1","name":"fruit"},{"id":"2","name":"veg"}]}},{"products":{"products":[{"id":"1","name":"apple"},{"id":"2","name":"pears"}]}}]
Благодарю.
Вы можете создать новый объект и использовать карту, чтобы изменить структуру данных и назначить эти данные новому объекту.
var data = [{"categories":{"category":{"id":"1","Name":"furit"}}},{"categories":{"category":{"id":"2","Name":"veg"}}}]
var r = {
categories: {
category: data.map(o => o.categories.category)
}
}
console.log(r)
Обновлено Для новой структуры данных вы можете использовать цикл forEach()
и добавить к объекту.
var data = [{"categories":{"category":{"id":"1","Name":"furit"}}},{"categories":{"category":{"id":"2","Name":"veg"}}},{"products":{"product":{"id":"1","Name":"fruit"}}},{"products":{"product":{"id":"2","Name":"pears"}}}]
var r = {categories: {category: []}, products: {product: []}}
data.forEach(function(e) {
if(e.categories) r.categories.category.push(e.categories.category)
if(e.products) r.products.product.push(e.products.product)
})
console.log(r)
Вы можете использовать Array.prototype.reduce()
, он уменьшит все объекты category
элементов массива в одном массиве categories
, давая ожидаемые результаты
Ваш код должен выглядеть так:
var result = data.reduce(function(a, b) {
a[0].categories.push(b.categories);
return a;
}, [{
categories: []
}]);
Или если вы хотите, чтобы object
как результат вместо array
использовал его так:
var result = data.reduce(function(a, b) {
a.categories.push(b.categories);
return a;
}, {
categories: []
});
Демо - версия:
var data = [{
"categories": {
"category": {
"id": "1",
"Name": "furit"
}
}
},
{
"categories": {
"category": {
"id": "2",
"Name": "veg"
}
}
}
];
var result = data.reduce(function(a, b) {
a[0].categories.push(b.categories);
return a;
}, [{
categories: []
}]);
console.log(result);
Это изменение после добавления products
к исходному объекту:
var result = data.reduce(function(a, b) {
if(b.categories)
a[0].categories.push(b.categories);
if(b.products)
a[0].products.push(b.products);
return a;
}, [{
categories: [],
products : []
}]);
Демо - версия:
var data = [{"categories":{"category":{"id":"1","Name":"furit"}}},{"categories":{"category":{"id":"2","Name":"veg"}}},{"products":{"product":{"id":"1","Name":"fruit"}}},{"products":{"product":{"id":"2","Name":"pears"}}}]
;
var result = data.reduce(function(a, b) {
if(b.categories)
a[0].categories.push(b.categories);
if(b.products)
a[0].products.push(b.products);
return a;
}, [{
categories: [],
products : []
}]);
console.log(result);