【问题标题】:Combining two arrays in JavaScript with for loop [closed]将JavaScript中的两个数组与for循环结合起来[关闭]
【发布时间】:2020-01-02 12:17:31
【问题描述】:

我想知道是否有更聪明的方法 1)声明两个数组,尤其是数字一(可能使用点运算符?),和 2) 将这两个数组的字符串元素组合成第三个,而不使用老式的 for 循环,可能使用 Array.map() 或 Array.from()?

const letters=['a', 'b', 'c', 'd']
const numbers=[1, 2, 3, 4, 5, 6]

const combined=[]

for (let i=0; i < letters.length; i++)
{
    for (let j=0; j < numbers.length; j++)
    {
        combined.push(letters[i] + numbers[j]);
    }
}

// output a1, a2, a3, a4, a5, a6, b1...

【问题讨论】:

  • 这对我来说看起来非常好(除了new Array 部分,以及隐含的全局ijs)。我认为没有任何其他方法比你目前正在做的更有效。我更喜欢forEachfor..of 而不是for,但这是一个微不足道的改进
  • @CertainPerformance 他们的全球化程度如何?对不起初学者的问题,我只是想知道为什么我应该使用其他迭代器变量名?你能否详细说明为什么我不应该使用 new 而不是 var letters=["a", "b", "c", "d"];谢谢!
  • @CertainPerformance “更智能的方式”是否意味着“更高的性能”?我认为他只是在寻找一种“更聪明”的方法,如果我们可以在这里谈论“更聪明”,因为它意味着阅读一行代码左右。
  • lettersnumbers 数组是输入的一部分,还是您也想动态创建它们?
  • 您的代码有效,找到“更优雅”的方式只是一个基于意见的问题。

标签: javascript arrays dictionary for-loop element


【解决方案1】:

1) 声明两个数组,尤其是数字一(可能使用点运算符?)

您的意思是 create 而不是声明(您不在 JavaScript 中声明数组,因为它是一种松散类型的语言)。是的,您可以使用数组文字:

var letters = ["a", "b", "c", "d"];

split:

var letters = "abcd".split("");

...尽管split 是否“更聪明”是一个见仁见智的问题。 :-)

你也可以使用Array.from的映射功能:

var letters = Array.from(Array(4), (_, index) => String.fromCharCode(97 + index));

但这可能有点过头了。你提到的数字一更有意义:

var numbers = Array.from(Array(6), (_, index) => index + 1); // Note I've renamed it to be plural

2) 将这两个数组的字符串元素组合到一个组合中,而不使用老式的 for 循环,也许使用 Array.map() 或 Array.from()?

for 循环简单明了,但for-of 可能更简单明了:

for (const letter of letters) {
    for (const number of numbers) { // Note I've renamed the `numbers` array to be plural
        combined.push(letter + number);
    }
}

虽然您可以通过对索引进行数学运算将其硬塞到Array.from,但对我来说这太复杂了。


for-ofArray.from 从 ES2015(又名“ES6”)开始都是新的(ish),因此请务必检查您的目标环境以获得支持,和/或使用转译(对于 for-of)和polyfill(用于Array.from)。

【讨论】:

    【解决方案2】:

    抱歉,您的代码中存在拼写错误。您在定义变量时写了“数字”而不是“数字”。

    var letters=new Array("a", "b", "c", "d");
    var numbers=new Array("1", "2", "3", "4", "5", "6");
    var combined=new Array();
    
    letters.forEach(letter => {
        numbers.forEach(number => {
            combined.push(letter + number);
        }
    });
    

    【讨论】:

      【解决方案3】:

      正如其他人所提到的,for 循环就足够了。如果你想使用.map() 这样的东西,你可以这样做:

      var letters=new Array("a", "b", "c", "d");
      var numbers=new Array("1", "2", "3", "4", "5", "6");
      var combined=new Array();
      
      // Map array
      letters.map(letter => {
        for(let number of numbers) combined.push(letter + number)
      });
      
      // Log output
      console.log(combined); // -> "a1", "a2", "a3", "a4", "a5", "a6", "b1", "b2", "b3", ...
      
      

      【讨论】:

        【解决方案4】:

        使用reduce函数:

        letters.reduce((a,b) => {
           a.push(...number.map(n => b + n));
           return a;
        }, [])
        

        这应该会产生预期的结果

        ["a1", "a2", "a3", "a4", "a5", "a6", "b1", "b2", "b3", "b4", "b5", "b6", "c1", "c2", "c3", "c4", "c5", "c6", "d1", "d2", "d3", "d4", "d5", "d6"]
        

        【讨论】:

          【解决方案5】:

          这是您需要的单线 -:

          let result = letters.reduce((comb, item, key) => comb.concat(numbers.map(i => (item+i))), []);
          

          var letters=new Array("a", "b", "c", "d");
          var numbers=new Array("1", "2", "3", "4", "5", "6");
          let result = letters.reduce((comb, item, key) => comb.concat(numbers.map(i => (item+i))), []);

          【讨论】:

            【解决方案6】:

            嵌套循环没有任何问题(当然应该是for..of,而不是for),但如果你想要一个“功能性”的解决方案,请考虑flatMap

            let letters = ["a", "b", "c", "d"];
            let numbers = ["1", "2", "3", "4", "5", "6"];
            
            let combined = letters.flatMap(a => numbers.map(n => a + n));
            
            console.log(combined);

            【讨论】:

              猜你喜欢
              • 2021-11-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-16
              • 1970-01-01
              • 1970-01-01
              • 2017-02-19
              • 2021-09-18
              相关资源
              最近更新 更多