我编写了一个函数将两个数组合并为一个数组,但出现“无法读取未定义的属性”
2022-02-22
345
我尝试将 2 个数组合并为一个新数组,该新数组将组合每个数组的对象。我知道如何将 2 个数组合并为 1 个大数组,但我无法将实际对象合并为该数组内的新对象。下面列出了我尝试获取的输入和预期输出的示例:
给定数组:
array1 = ['1','2','3'];
array2 = ['a','b','c'];
新输出的数组应为:
array3 = ['1a','2b','3c'];
这是我迄今为止尝试做的事情。在这个例子中,我尝试创建玩尤克牌游戏所需的一副牌(每张牌应有 9、10、J、Q 和 A 以及梅花、方块、红心和黑桃花色,总共 24 种牌组合)。我创建了 2 个数组(一个用于卡片“值”,一个用于卡片“花色”。对于我的函数,我将这两个卡片组都传递到一个 for 循环中,理想情况下,该循环将“花色”数组的对象附加到“值”数组的末尾。然后将这个新列表传递到空的“卡片组”数组中以返回新数组。但是,我得到了“未捕获的类型错误:无法读取未定义的属性(读取“长度”)”。这发生在我的函数“createDeck”的开头,以及当我尝试在底部的控制台日志语句中调用该函数时。任何帮助我理解需要用来组合这些数组的逻辑的帮助都将不胜感激,因为我才刚刚开始使用函数和数组。
const values = ['9','10', 'J', 'Q', 'K','A'];
const suits = ['C', 'D', 'H', 'S'];
function createDeck(values, suits) {
let deck = [];
for (let i = 0; i < suits.length; i++) {
for (let x = 0; x < values.length; x++) {
let card = {Value: values[x], Suit: suits[i]};
deck.push(card);
}
}
return deck;
}
console.log(createDeck());
3个回答
尝试声明一个新数组并在 for 循环中执行
array[i] = values[i] + suits[i]
也许你需要在带有字符串的数组中添加“”
abdou
2022-02-22
您可以使用 map 方法创建一个新数组。
const values = ['1','2', '3'];
const suits = ['a', 'b', 'c'];
function createDeck() {
let customArray = [];
// check for equality of array lengths
if (values.length === suits.length) {
// create a new array with the map method
customArray = values.map((value, index) => {
return value + suits[index]
})
}
return customArray;
}
console.log(createDeck())
Mehmet Guler
2022-02-22
基本上,您可以使用 Array.prototype.map() 方法 来实现预期结果。假设数组的长度相等。示例代码如下:
array1 = ['1','2','3'];
array2 = ['a','b','c'];
combineArrays = (arr1,arr2) => {
const arr = arr1.map((elem,index)=> {
elem += arr2[index];
return elem
})
return arr
}
console.log(combineArrays(array1, array2)) // ['1a','2b','3c']
For 循环版本为:
array1 = ['1','2', '3']
array2 = ['a', 'b', 'c']
combineArrays = (arr1,arr2) => {
const deck = []
for(i=0; i<arr1.length; i++) {
deck.push(arr1[i] + arr2[i])
}
return deck
}
console.log(combineArrays(array1, array2)) // ['1a','2b','3c']
bugracetin
2022-02-24