簡體   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