【问题标题】:Creating a function called zip() in Javascript在 Javascript 中创建一个名为 zip() 的函数
【发布时间】:2021-12-15 07:39:55
【问题描述】:

作为练习的一部分,我将创建一个名为 zip 的函数。它需要两个元素长度相等的数组,然后将它们分成两个具有相同索引元素的数组。我知道还有其他使用 map 功能的解决方案,但我想弄清楚是否有其他解决方案。到目前为止,我有这个:

function zip(arr1, arr2) {
  let pairArr = [];
  for(var i = 0; i < arr1.length; i++) {
    if(arr1.length === arr2.length){
      let pairs = [arr1[i],arr2[i]];
      pairArr.push(pairs);
    } return pairArr;
  }
}

这仅返回一个具有两个数组的第一个索引的数组。 [1, 2, 3, 4] [1, 2, 3, 4] 返回 [1, 1]。我需要它返回 [1, 1] [2, 2] [3, 3] [4, 4]。
谢谢。

【问题讨论】:

  • 您应该在循环完成后返回,而不是在循环内。循环内的无条件返回意味着循环不能迭代
  • 你不能指望别人为你思考和编写代码。您必须思考、尝试和调试。
  • 谢谢你,保罗,我没有意识到这一点。我明白了何塞,但我已经用几种方式写了这个,我只需要一个外部视角。感谢您的意见

标签: javascript arrays function


【解决方案1】:

您将 return 放入循环中。您应该将其添加到循环之外。例如:

function zip(arr1, arr2) {
       let pairArr = [];
             for(var i = 0; i < arr1.length; i++){
                 if (arr1.length === arr2.length){
                     let pairs = [arr1[i],arr2[i]];
                     pairArr.push(pairs);
                    } 
             }
             return pairArr;
     }
     
     
     
console.log(zip([1, 2, 3, 4], [1, 2, 3, 4] ));

【讨论】:

  • 谢谢阿琼。
【解决方案2】:

感谢大家的意见。我没有意识到我在循环中得到了回报。我确实解决了。这就是我的 zip 功能。

function zip(arr1, arr2) {
        let pairArr = [];
            for(var i = 0; i < arr1.length; i++){
                if (arr1.length === arr2.length){
                    pairArr[i] = [arr1[i],arr2[i]];


                }
            }return pairArr;
    }

【讨论】:

    【解决方案3】:

    这里有一个更好的 JavaScript 中 python 风格的 zip 实现,它可以接受任意数量的数组作为参数,并返回最短参数的结果。

    const zip = (...arrays) => {
        const length = Math.min(...arrays.map(a => a.length));
        return [...Array(length).keys()].map(i => arrays.map(a => a[i]));
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2020-12-29
      • 2015-06-30
      • 1970-01-01
      • 2019-12-05
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      相关资源
      最近更新 更多