【问题标题】:Javascript - combine two arrays in every possible way [duplicate]Javascript - 以各种可能的方式组合两个数组[重复]
【发布时间】:2020-04-20 15:22:32
【问题描述】:

如果我有两个数组:

var arrOne = ['a','b','c']
var arrTwo = ['1','2','3']

我怎样才能得到一个新的数组,它将像这样混合每个值:

var result = ['a1','a2','a3','b1','b2','b3','c1','c2','c3']

【问题讨论】:

  • 请发布您的代码,您尝试了什么?

标签: javascript


【解决方案1】:

你可以用一个简单的 for 循环来做到这一点

var arrOne = ['a','b','c']
var arrTwo = ['1','2','3']
var combinedArr = []

for (var i = 0; i < arrOne.length; i++) { 
    for (var j = 0; j < arrTwo.length; j++) { 
        combinedArr.push(arrOne[i].concat(arrTwo[j])); 
    } 
} 

combinedArr 将是 ["a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3"]

【讨论】:

    【解决方案2】:

    简单的解决方案,使用两个 forEach 循环

     const  res = [];
        arrOne.forEach(item => {
            arrTwo.forEach(item2 => {
                res.push(item + item2) // concatenate two items
            })
        })
    console.log(res)
    

    【讨论】:

      【解决方案3】:

      您可以通过两个嵌套循环轻松实现这样的功能。

      以下将使用组合器回调作为第三个参数,因此可以自定义:

      function combine(a,b,combiner){
        const output=[]
        for(const itemA of a){
          for(const itemB of b){
            output.push(combiner(itemA,itemB))
          }
        }
        return output
      }
      
      var arrOne = ['a','b','c']
      var arrTwo = ['1','2','3']
      
      console.log(combine(arrOne,arrTwo,(a,b)=>a+b)) // ['a1','a2','a3','b1','b2','b3','c1','c2','c3']
      

      【讨论】:

        【解决方案4】:

        const arrOne = ['a','b','c'];
        const arrTwo = ['1','2','3'];
        
        // flat map the first array to an array of permutations with the second array
        const permute = (arr1, arr2) => arr1.flatMap(
          el1 => arr2.map(
            el2 => `${el1}${el2}`)
          );
        
        console.log(permute(arrOne, arrTwo));

        建立在解决将两个数组排列为通用 n 数组排列的基础上

        const arr1 = ['a','b','c'];
        const arr2 = ['1','2','3'];
        const arr3 = ['d','e','f', 'g'];
        const arr4 = ['4','5','6', '7'];
        
        // flat map the first array to an array of permutations with the second array
        const permute = (arr1, arr2) => arr1.flatMap(
          el1 => arr2.map(el2 => `${el1}${el2}`)
        );
        
        // reduce array of args with first arg as initial permuted array, permuting result array with each next array argument.
        const permuteAll = (...args) => args
          .slice(1)
          .reduce((acc, currArr) => permute(acc, currArr), args[0]);
        
        console.log(permuteAll(arr1, arr2));
        console.log(permuteAll(arr1, arr2, arr3));
        console.log(permuteAll(arr1, arr2, arr3, arr4));

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2019-10-06
          • 2019-12-22
          • 2023-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多