开发者问题收集

我编写了一个函数将两个数组合并为一个数组,但出现“无法读取未定义的属性”

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