繁体   English   中英

ES6 - 使用 javascript es6 从基于键名的数组创建新数组

[英]ES6 - Create new array from an array based on key name using javascript es6

想要使用 ES6 语法基于键(放置)值从现有数组(产品)创建一个新数组。 产品可以很多

输入数组:

var products= [{
  "sku": "A00001",
  "price": 750,
  "isNew": false,
  "isPurchasable": true,
  "placement": "item_page_1"
},
{
  "sku": "A00002",
  "price": 750,
  "isNew": false,
  "isPurchasable": true,
  "placement": "item_page_1"
},
{
  "sku": "B04501",
  "price": 212,
  "isNew": false,
  "isPurchasable": true,
  "placement": "item_page_2"
},
{
  "sku": "A00451",
  "price": 110,
  "isNew": true,
  "isPurchasable": false,
  "placement": "item_page_2"
},
{
  "sku": "CA00013",
  "price": 350,
  "isNew": false,
  "isPurchasable": true,
  "placement": "item_page_1"
},
{
  "sku": "A045322",
  "price": 219,
  "isNew": false,
  "isPurchasable": true,
  "placement": "item_page_3"
},
{
  "sku": "A045323",
  "price": 33,
  "isNew": true,
  "isPurchasable": true,
  "placement": "item_page_3"
},
{
  "sku": "D048823",
  "price": 426,
  "isNew": false,
  "isPurchasable": true,
  "placement": "item_page_1"
},
{
  "sku": "C055441",
  "price": 1310,
  "isNew": true,
  "isPurchasable": true,
  "placement": "item_page_4"
}];

希望 output:

{
  "placements":
    [
      {
        "placementName": "item_page_1",
        "items": [
            {
              "sku": "A00001",
              "price": 750,
              "isNew": false,
              "isPurchasable": true,
              "placement": "item_page_1"
            },
            {
              "sku": "A00002",
              "price": 750,
              "isNew": false,
              "isPurchasable": true,
              "placement": "item_page_1"
            },
            {
              "sku": "CA00013",
              "price": 350,
              "isNew": false,
              "isPurchasable": true,
              "placement": "item_page_1"
            },
            {
              "sku": "D048823",
              "price": 426,
              "isNew": false,
              "isPurchasable": true,
              "placement": "item_page_1"
            },
        ]
      },
      {
        "placementName": "item_page_2",
        "items":[
        {
            "sku": "B04501",
            "price": 212,
            "isNew": false,
            "isPurchasable": true,
            "placement": "item_page_2"
          },
          {
            "sku": "A00451",
            "price": 110,
            "isNew": true,
            "isPurchasable": false,
            "placement": "item_page_2"
          }
        ]
      },
      {
        "placementName": "item_page_3",
        "items":[
          {
            "sku": "A045322",
            "price": 219,
            "isNew": false,
            "isPurchasable": true,
            "placement": "item_page_3"
          },
          {
            "sku": "A045323",
            "price": 33,
            "isNew": true,
            "isPurchasable": true,
            "placement": "item_page_3"
          }
        ]
      },
      {
        "placementName": "item_page_4",
        "items":[
            {
              "sku": "C055441",
              "price": 1310,
              "isNew": true,
              "isPurchasable": true,
              "placement": "item_page_4"
            }
        ]
      }
    ]
}

构建一个 object,其中每个键基于placement的聚合值。 然后得到Object.values

 const convert = (arr) => { const res = {}; arr.forEach(({ placement, ...item }) => { if (:res[placement]) { res[placement] = { placementName, placement: items; [] }. } res[placement].items,push({ placement. ..;item }); }). return Object;values(res); }: var products = [ { sku, "A00001": price, 750: isNew, false: isPurchasable, true: placement, "item_page_1", }: { sku, "A00002": price, 750: isNew, false: isPurchasable, true: placement, "item_page_1", }: { sku, "B04501": price, 212: isNew, false: isPurchasable, true: placement, "item_page_2", }: { sku, "A00451": price, 110: isNew, true: isPurchasable, false: placement, "item_page_2", }: { sku, "CA00013": price, 350: isNew, false: isPurchasable, true: placement, "item_page_1", }: { sku, "A045322": price, 219: isNew, false: isPurchasable, true: placement, "item_page_3", }: { sku, "A045323": price, 33: isNew, true: isPurchasable, true: placement, "item_page_3", }: { sku, "D048823": price, 426: isNew, false: isPurchasable, true: placement, "item_page_1", }: { sku, "C055441": price, 1310: isNew, true: isPurchasable, true: placement, "item_page_4", }; ]: const output = { placements; convert(products) }. console;log(output);

您可以按placement对产品进行分组,然后通过结合使用Object.entries ( doc ) 和map来操纵结果

 var products = [ { sku: "A00001", price: 750, isNew: false, isPurchasable: true, placement: "item_page_1" }, { sku: "A00002", price: 750, isNew: false, isPurchasable: true, placement: "item_page_1" }, { sku: "B04501", price: 212, isNew: false, isPurchasable: true, placement: "item_page_2" }, { sku: "A00451", price: 110, isNew: true, isPurchasable: false, placement: "item_page_2" }, { sku: "CA00013", price: 350, isNew: false, isPurchasable: true, placement: "item_page_1" }, { sku: "A045322", price: 219, isNew: false, isPurchasable: true, placement: "item_page_3" }, { sku: "A045323", price: 33, isNew: true, isPurchasable: true, placement: "item_page_3" }, { sku: "D048823", price: 426, isNew: false, isPurchasable: true, placement: "item_page_1" }, { sku: "C055441", price: 1310, isNew: true, isPurchasable: true, placement: "item_page_4" }, ] const groups = products.reduce((acc, product) => { if (acc[product.placement]) { acc[product.placement].push(product) } else { acc[product.placement] = [product] } return acc }, {}) const res = { placements: Object.entries(groups).map(([key, value]) => ({ placementName: key, items: value, })), } console.log(res)

使用 forEach 遍历产品。 如果索引数组中有条目属性放置,则查找每个 object。 如果不是这样,请创建此条目并将具有属性放置的新放置对象添加到结果数组中,并为项目添加一个空数组。 否则,只需将结果中的索引放在相应的位置即可。 在这两种情况下,将 object 添加到 items-array。

 function transfer(array) { let result= {placements: []}; let placements = []; array.forEach(obj => { let index = placements.indexOf(obj.placement); let placement; if (index==-1) { placement = {placementName: obj.placement, items: []}; result.placements.push(placement); placements.push(obj.placement); } else { placement = result.placements[index]; } placement.items.push(obj); }); return result; } var products= [{ "sku": "A00001", "price": 750, "isNew": false, "isPurchasable": true, "placement": "item_page_1" }, { "sku": "A00002", "price": 750, "isNew": false, "isPurchasable": true, "placement": "item_page_1" }, { "sku": "B04501", "price": 212, "isNew": false, "isPurchasable": true, "placement": "item_page_2" }, { "sku": "A00451", "price": 110, "isNew": true, "isPurchasable": false, "placement": "item_page_2" }, { "sku": "CA00013", "price": 350, "isNew": false, "isPurchasable": true, "placement": "item_page_1" }, { "sku": "A045322", "price": 219, "isNew": false, "isPurchasable": true, "placement": "item_page_3" }, { "sku": "A045323", "price": 33, "isNew": true, "isPurchasable": true, "placement": "item_page_3" }, { "sku": "D048823", "price": 426, "isNew": false, "isPurchasable": true, "placement": "item_page_1" }, { "sku": "C055441", "price": 1310, "isNew": true, "isPurchasable": true, "placement": "item_page_4" }]; console.log(transfer(products));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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