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

问题描述

希望使用ES6语法根据键(放置)值从现有阵列(产品)创建新阵列。产品可以很多

输入数组:

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

期望输出:

{
  "placements":
    [
      {
        "placementName": "item_page_1","items": [
            {
              "sku": "A00001","placement": "item_page_1"
            },{
              "sku": "A00002",{
              "sku": "CA00013",{
              "sku": "D048823",]
      },{
        "placementName": "item_page_2","items":[
        {
            "sku": "B04501","placement": "item_page_2"
          },{
            "sku": "A00451","placement": "item_page_2"
          }
        ]
      },{
        "placementName": "item_page_3","items":[
          {
            "sku": "A045322","placement": "item_page_3"
          },{
            "sku": "A045323","placement": "item_page_3"
          }
        ]
      },{
        "placementName": "item_page_4","items":[
            {
              "sku": "C055441","placement": "item_page_4"
            }
        ]
      }
    ]
}

解决方法

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

var products = [
  { sku: "A00001",price: 750,isNew: false,isPurchasable: true,placement: "item_page_1" },{ sku: "A00002",{ sku: "B04501",price: 212,placement: "item_page_2" },{ sku: "A00451",price: 110,isNew: true,isPurchasable: false,{ sku: "CA00013",price: 350,{ sku: "A045322",price: 219,placement: "item_page_3" },{ sku: "A045323",price: 33,{ sku: "D048823",price: 426,{ sku: "C055441",price: 1310,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遍历产品。如果索引数组中有一个条目属性放置,请查找每个对象。如果不是这样,请创建此条目,并将新的放置对象添加到结果数组中,该对象具有属性placement,并且对于项目为空数组。否则,只需将索引与结果中的相应位置放在一起即可。在两种情况下,都将对象添加到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",{
  "sku": "B04501","price": 212,"placement": "item_page_2"
},{
  "sku": "A00451","price": 110,"isNew": true,"isPurchasable": false,{
  "sku": "CA00013","price": 350,{
  "sku": "A045322","price": 219,"placement": "item_page_3"
},{
  "sku": "A045323","price": 33,{
  "sku": "D048823","price": 426,{
  "sku": "C055441","price": 1310,"placement": "item_page_4"
}];

console.log(transfer(products));

,

基于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",placement: "item_page_1",},{
    sku: "A00002",{
    sku: "B04501",placement: "item_page_2",{
    sku: "A00451",{
    sku: "CA00013",{
    sku: "A045322",placement: "item_page_3",{
    sku: "A045323",{
    sku: "D048823",{
    sku: "C055441",placement: "item_page_4",];

const output = { placements: convert(products) };
console.log(output);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...