javascript - 基于属性的javascript克隆对象

标签 javascript arrays grouping clone

我正在像这样获取一组 JSON 对象

[ 
    { name: "Doc 1", 
      product: ["product 1", "product 2"],
      type: ["type 1", "type 2"] 
    },
    { name: "Doc 2", 
      product: ["product 1"],
      type: ["type 1"] 
    },
    { name: "Doc 3", 
      product: ["product 2"],
      type: ["type 2"] 
    }
    ...
]

我需要首先为对象的每个产品克隆对象(因此我有 2 个 Doc 1 实例),然后我想根据产品对对象进行分组(这将给我另外 2 个对象),然后根据类型进行分组,这将给我另外 2 个对象。

最初我们只是根据产品进行分组,但后来我们发现我们的文档有多个与之关联的产品,因此我们需要转换原始文档。

如何将每个卡克隆到每个产品的新阵列?

预计最终的对象组将类似于这个简单的实例,文档 1 是唯一的重复项,因为它与产品 1 和 2 相关联。

[ 
  { name: "Doc 1", 
    product: ["product 1", "product 2"],
    type: ["type 1", "type 2"] 
  },
  { name: "Doc 1", 
    product: ["product 1", "product 2"],
    type: ["type 1", "type 2"] 
  },
  { name: "Doc 2", 
    product: ["product 1"],
    type: ["type 1"] 
  },
  { name: "Doc 3", 
    product: ["product 2"],
    type: ["type 2"] 
  }
  ...
]

最佳答案

您可以使用Object.assign克隆对象,并使用[].concat(yourArray)克隆基元数组。

var docs = [ 
    { name: "Doc 1", 
      product: ["product 1", "product 2"],
      type: ["type 1", "type 2"] 
    },
    { name: "Doc 2", 
      product: ["product 1"],
      type: ["type 1"] 
    },
    { name: "Doc 3", 
      product: ["product 2"],
      type: ["type 2"] 
    }
]

var cloned = docs.map(function (c) {
   // This will not clone the product
   c = Object.assign({}, c);
   
   // Clone the product array
   c.product = [].concat(c.product);
   return c;
});

// Group by products
var byProduct = {
  /*
    "product 1": [...]
  */
};

cloned.forEach(function (c) {
  c.product.forEach(function (prod) {
    var groupedDocs = byProduct[prod] = byProduct[prod] || [];
    groupedDocs.push(c);
  });
});

console.log(byProduct);

关于javascript - 基于属性的javascript克隆对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44263452/

相关文章:

javascript - 使用 Enquire.js 和 Vue.js 查询浏览器的大小

javascript - 运行js的书签

javascript - 如何通过在 javascript 的组合框中单击它来选择一个项目?

Java 数组拆分和重新连接。丢失的元素

mysql - SQL如何计算行中至少有1、5、10、20等交易的信用卡数量

javascript - Nodejs未捕获异常处理

c - 请帮助解释这个域正在做什么(使用函数在数组中添加斐波那契序列元素的程序)

Python列出数组中每个元素的命名索引?

python - 如何在 ZPT 中循环 OrderedDict 的子组?

python - 将具有相同列表属性的对象分组