Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用for循环组合JavaScript中的两个数组_Javascript_Arrays_Dictionary_For Loop_Element - Fatal编程技术网

使用for循环组合JavaScript中的两个数组

使用for循环组合JavaScript中的两个数组,javascript,arrays,dictionary,for-loop,element,Javascript,Arrays,Dictionary,For Loop,Element,我想知道是否有更聪明的方法 1) 声明两个数组,特别是数字1(可能使用点运算符?),以及 2) 将这两个数组的字符串元素合并到第三个数组中,而不使用老式的for循环,可能与Array.map()或Array.from()一起使用 const字母=['a','b','c','d'] 常量数=[1,2,3,4,5,6] 常数组合=[] for(设i=0;icomb.concat(numbers.map(i=>(item+i)),[]) 嵌套循环没有什么错误(当然,的代码应该是< >,< >不是,但

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

const字母=['a','b','c','d']
常量数=[1,2,3,4,5,6]
常数组合=[]
for(设i=0;i
1) 声明两个数组,特别是数字1(可能使用点运算符?)

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

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

var letters = "abcd".split("");
…尽管
split
是否“更聪明”是一个意见问题。:-)

您还可以使用的映射功能:

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

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 (const letter of letters) {
    for (const number of numbers) { // Note I've renamed the `numbers` array to be plural
        combined.push(letter + number);
    }
}
虽然你可以把它塞进一个
数组。从
开始,通过对索引进行数学运算,对我来说,它会过于复杂



for of
数组。from
自ES2015(也称为“ES6”)起都是新的(ish),因此请务必检查您的目标环境是否支持,和/或使用transpiling(for
for of
)和polyfill(for
数组。from
)。

很抱歉,您的代码中存在键入错误。定义变量时,您编写了“number”而不是“numbers”

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);
    }
});

正如其他人所提到的,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", ...

使用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"]

这是你需要的一个班轮:

let result = letters.reduce((comb, item, key) => comb.concat(numbers.map(i => (item+i))), []);
var字母=新数组(“a”、“b”、“c”、“d”);
变量数=新数组(“1”、“2”、“3”、“4”、“5”、“6”);

让结果=字母.reduce((comb,item,key)=>comb.concat(numbers.map(i=>(item+i)),[]) 嵌套循环没有什么错误(当然,的代码应该是< >,< <代码> >不是<代码>,但是如果您想要一个“功能性”的解决方案,请考虑:

让字母=[“a”、“b”、“c”、“d”];
设数字=[“1”、“2”、“3”、“4”、“5”、“6”];
让combined=letters.flatMap(a=>numbers.map(n=>a+n));

控制台日志(组合)
在我看来非常好(除了
新数组
部分,以及隐式全局
i
j
s)。我不认为任何其他方法比你目前所做的更有效。我更喜欢
forEach
for..of
而不是
for
,但那是微不足道的improvement@CertainPerformance它们是如何全球化的?对于初学者的问题,我很抱歉,我只是想知道为什么我应该使用其他迭代器变量名?你能解释一下为什么我不应该使用新的变量字母=[“a”,“b”,“c”,“d”];谢谢@“更聪明的方式”是否意味着“更高效”?我认为他只是在寻找一种“更聪明”的方法,如果我们可以在这里谈论“更聪明”,因为这意味着阅读一行左右的代码。
字母和
数字是输入的一部分,还是你想动态创建它们?你的代码工作正常,找到一种“更优雅”的方法道路只是一个基于意见的问题。
["a1", "a2", "a3", "a4", "a5", "a6", "b1", "b2", "b3", "b4", "b5", "b6", "c1", "c2", "c3", "c4", "c5", "c6", "d1", "d2", "d3", "d4", "d5", "d6"]
let result = letters.reduce((comb, item, key) => comb.concat(numbers.map(i => (item+i))), []);