[英]Create new object by sorting array of objects key
我有一个由项目组成的对象数组:
[
{
CATEGORY:"Fruits"
ITEM_AVAIL:true
ITEM_NAME:"Apple"
ITEM_PRICE:100
ITEM_UNIT:"per_kg"
ITEM_UPDATED:Object
ORDER_COUNT:0
},
{
CATEGORY:"Vegetables"
ITEM_AVAIL:true
ITEM_NAME:"Aloo"
ITEM_PRICE:1000
ITEM_UNIT:"per_kg"
ITEM_UPDATED:Object
ORDER_COUNT:0
}
]
我想创建一个新对象,使对象的每个键都是一个类别并保存项目对象的数组,例如:
{
Fruits: [
{
CATEGORY:"Fruits"
ITEM_AVAIL:true
ITEM_NAME:"Apple"
ITEM_PRICE:100
ITEM_UNIT:"per_kg"
ITEM_UPDATED:Object
ORDER_COUNT:0
},
//more fruits
]
Vegetables: [
{
CATEGORY:"Vegetables"
ITEM_AVAIL:true
ITEM_NAME:"Aloo"
ITEM_PRICE:1000
ITEM_UNIT:"per_kg"
ITEM_UPDATED:Object
ORDER_COUNT:0
},
//more vegetables
]
}
将根据项目类别创建新对象。
您可以像这样创建新对象
var data = [ { CATEGORY:"Fruits", ITEM_AVAIL:true, ITEM_NAME:"Apple", ITEM_PRICE:100, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0, }, { CATEGORY:"Vegetables", ITEM_AVAIL:true, ITEM_NAME:"Aloo", ITEM_PRICE:1000, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0, } ]; var newobj = []; for (i in data){ newobj[i] = []; newobj[i][data[i].CATEGORY] = data[i]; } console.log(newobj);
您可以使用映射按类别作为键对元素进行分组,并将项目列表作为值:
let items = [ { CATEGORY:"Fruits", ITEM_AVAIL:true, ITEM_NAME:"Apple", ITEM_PRICE:100, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0 }, { CATEGORY:"Vegetables", ITEM_AVAIL:true, ITEM_NAME:"Aloo", ITEM_PRICE:1000, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0 }, { CATEGORY:"Fruits", ITEM_AVAIL:true, ITEM_NAME:"Apple1", ITEM_PRICE:200, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0 }, { CATEGORY:"Vegetables", ITEM_AVAIL:true, ITEM_NAME:"Aloo1", ITEM_PRICE:2000, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0 }, ] let obj = {}; items.forEach((item) => { if(!obj[item.CATEGORY]) obj[item.CATEGORY] = [ item ]; else obj[item.CATEGORY].push(item); }); console.log(obj);
使用Array#reduce 。 查看实际对象是否存在以该类别作为名称的属性。 如果不是,则使用空数组作为值创建它。 在这两种情况下,这个数组都是对象。
let arr = [ { CATEGORY:"Fruits", ITEM_AVAIL:true, ITEM_NAME:"Apple", ITEM_PRICE:100, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0, }, { CATEGORY:"Vegetables", ITEM_AVAIL:true, ITEM_NAME:"Aloo", ITEM_PRICE:1000, ITEM_UNIT:"per_kg", ITEM_UPDATED:Object, ORDER_COUNT:0, } ]; let res = arr.reduce((acc, cur) => { if (!acc[cur.CATEGORY]) { acc[cur.CATEGORY] = []; } acc[cur.CATEGORY].push(cur); return acc; },{}); console.log(res);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.