Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
385 views
in Technique[技术] by (71.8m points)

请问怎么将这个数组转换我想要的结构?

let a = [{
      label: "英国2号处理中心",
      prop: "center",
    },
    {
      label: "美国1号处理中心",
      prop: "center",
    }, {
      label: "法国处理中心",
      prop: "center",
    },
    {
      label: "CNY",
      prop: "currency",
    },
    {
      label: "USD",
      prop: "currency",
    },
    {
      label: "JPY",
      prop: "currency",
    }
  ];
  
  let b = [{
      center: "英国2号处理中心",
      currency: "CNY"
    },
    {
      center: "英国2号处理中心",
      currency: "USD"
    }, {
      center: "英国2号处理中心",
      currency: "JPY"
    },
    {
      center: "美国1号处理中心",
      currency: "CNY"
    },
    {
      center: "美国1号处理中心",
      currency: "USD"
    },
    {
      center: "美国1号处理中心",
      currency: "JPY"
    }, {
      center: "法国处理中心",
      currency: "CNY"
    }, {
      center: "法国处理中心",
      currency: "USD"
    }, {
      center: "法国处理中心",
      currency: "JPY"
    }
  ];

如何动态把a数组结构转换成b数组结构?像如果在a数组再添加一个新的prop属性b数组也对应生成。

let arr = [["英国2号处理中心", "英国3号处理中心"],["CNY", "USD"],["a公司", "b公司"]];
    let narr = []

    arr[0].forEach((item, i) => {
      arr[1].forEach(item2 => {
        arr[2].forEach(item3 => {
          narr.push({
            center: item,
            currency: item2,
            company: item3
          });
        });
      });
    });

或者像这条数据,arr数组是动态不确定有几层的,如何动态的循环生成同样的narr数组呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
function transform(items = []) {
  const record = {};
  for (const { label, prop } of items) {
    (record[prop] || (record[prop] = [])).push({ [prop]: label });
  }

  let result = [];
  for (const pairs of Object.values(record)) {
    if (0 === result.length) {
      result.push({});
    }

    result = result.flatMap((item) =>
      pairs.map((pair) => ({...item, ...pair}))
    );
  }

  return result;
}

transform(a);

第二种没给key


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...