繁体   English   中英

通过对对象键数组进行排序来创建新对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM