【问题标题】:How can make a list from matrix in javascript?如何从javascript中的矩阵制作列表?
【发布时间】:2021-08-09 10:49:08
【问题描述】:

我有一个这样的数组

  const input_array= [
    ["black", "blue"],
    ["large", "medium"],
    ["a", "b", "c"]
    //... is it dynamic can be added many rows
  ];

我怎样才能得到这样的数组:

const finallist = [
    ["black", "large", "a"],
    ["black", "large", "b"],
    ["black", "large", "c"],
      
    ["black", "medium", "a"],
    ["black", "medium", "b"],
    ["black", "medium", "c"],

    ["blue", "large", "a"],
    ["blue", "large", "b"],
    ["blue", "large", "c"],
      
    ["blue", "medium", "a"],
    ["blue", "medium", "b"],
    ["blue", "medium", "c"],
  ]

请记住 input_array 是动态的

请告诉我该怎么做

【问题讨论】:

  • 您可以递归地执行此操作吗?但是根据有多少顶级项目,您可能会达到堆栈限制。
  • 你能给我一个示例代码吗?
  • 您遇到问题的代码是什么?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?请提供minimal reproducible example。请注意Stack Overflow不是代码编写服务,你需要展示你的努力!

标签: javascript vue.js


【解决方案1】:

看看这个,可能会有帮助:

const input_array = [
    ["black", "blue"],
    ["large", "medium"],
    ["a", "b", "c"]
    //... is it dynamic can be added many rows
];
const mmc = input_array.reduce((e, r) => e * r.length, 1);
const finallist = input_array.map((x,i)=>({index:i,arr:x})).reduce((e, r) => {
    for (var u = 0; u < mmc; u++) e[u] && (!r.arr.some(r => e[u].includes(r)) || e[u].length <= r.index) ? e[u].push(r.arr[u % r.arr.length]) : e.push([r.arr[u % r.arr.length]]);
    return e.sort(), e
}, []);

小心!这可能会在大矩阵范围内破坏您的浏览器。

【讨论】:

  • 谢谢@ForhadRed
  • 嗨@SarwarHasan。对不起,我犯了一个错误。有一个虫子!如果两个不同的矩阵中有重复的值,上面的代码可能会导致错误;因此,我已经杀死了编辑我的答案的错误,以便在上述条件下给出正确的答案。
【解决方案2】:

你可以这样做:

const input_array = [
    ["black", "blue"],
    ["large", "medium"],
    ["a", "b", "c"]
]
const getCompinations = array =>
  array.reduce((v, b) =>
    v.reduce((r, g) => [...r, ...b.map(w => [].concat(g, w))], [])
  )
console.log(getCompinations(input_array))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2015-10-08
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多