我写了一个函数将两个数组合并为一个数组,但我得到了"Cannot read properties of undefined"



我正在尝试获取两个数组,并将它们合并到一个新的数组中,该数组将组合每个数组的对象。我知道如何将两个数组组合成一个大数组,但我在将实际对象组合成该数组中的新对象时遇到了问题。下面列出了我试图获得的输入和预期输出的示例:

给定阵列:

array1=['1','2','3'];

array2=[‘a’,‘b’,‘c’];

新输出的数组应为:

array3=['1a','2b','3c'];

以下是我迄今为止尝试做的事情。在这个例子中,我试图创建玩euchre游戏所需的一副牌(每张牌应该有9、10、Jack、Queen和Ace牌,以及球杆、钻石、红心和黑桃的套装,总共24张牌的组合(。我创建了2个阵列(一个用于卡片"value",另一个用于卡"suits"。对于我的函数,我将这两个deck都传递到for循环中,该循环理想情况下会将"suites"数组的对象附加到"values"数组的末尾。然后将此新列表传递到空的"deck"数组中以返回新数组。但是,我得到了和"未捕获类型错误:无法读取未定义的属性(读作"长度"("这发生在我的函数"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());

尝试声明一个新数组,并在for循环中执行

array[i] = values[i] + suits[i]

也许您需要添加"在具有字符串的阵列中

您可以使用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())

基本上,您可以使用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']

循环版本为:

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']

最新更新