首页 > 解决方案 > 对象操作:组合集合的两个条目

问题描述

您将采取什么过程将具有 3 个键/值对的对象数组转换为包含所有键/值对组合的对象组合数组?...数组可以是任意大小。

例子:

var input = [
  {keyA: "value1a", keyB: "value1b", keyC: "value1c"},
  [keyA: "value2a", keyB: "value2b", keyC: "value2c"}
];

转换为:

var output = [
  {keyA: "value1a", keyB: "value1b", keyC: "value1c"},
  {keyA: "value1a", keyB: "value1b", keyC: "value2c"},
  {keyA: "value1a", keyB: "value2b", keyC: "value1c"},
  {keyA: "value1a", keyB: "value2b", keyC: "value2c"},

  {keyA: "value2a", keyB: "value1b", keyC: "value1c"},
  {keyA: "value2a", keyB: "value1b", keyC: "value2c"},
  {keyA: "value2a", keyB: "value2b", keyC: "value1c"},
  {keyA: "value2a", keyB: "value2b", keyC: "value2c"},

  // etc.
];

我不是 100% 确定如何处理它,就数组而言,我知道使用 3 个数组我会做 3 个嵌套循环 concat 或推入单个数组。但是,对于对象,我正在绘制空白。我可以将每个属性中的每个值推送到它们自己的数组中,并使用嵌套循环迭代每个值,但相信有更好的方法。

目前,我完全如上所述。

let a = [];
let b = [];
let c = [];

inputs.forEach(input => {
  a.push(input.key1);
  b.push(input.key2);
  c.push(input.key3);
});

let output = [];
a.forEach(x => {
  b.forEach(y => {
    c.forEach(z => {
      let result = {};
      result.a = x;
      result.b = y;
      result.c = z;
      output.push(result);
    });
  });
});

但是必须想象有一种更好的方法,我就是无法理解。

标签: javascriptobject

解决方案


这将对您有所帮助。

var len=2;
var Arr=[];
for(var i=1;i<=len;i++)
{
  for(var j=1;j<=len;j++)
  {
    for(var k=1;k<=len;k++)
    {
        var obj={
      keyA:"value"+i+"a",
      keyB:"value"+j+"a", 
      keyC:"value"+k+"a"
      };
      Arr.push(obj);
    }
  }
}
console.log(Arr);

https://jsfiddle.net/7h2cdfay/2/


推荐阅读