为什么重复元素返回未定义?

时间:2018-07-11 17:52:13

标签: javascript arrays loops web-applications

 const cardChild = document.querySelectorAll('.card i');
 const cardsArray = ['a','a','b','b','c','c']; 
 const matchArray = [];

function cardsToClass() {
     for (i = 0; i < cardChild.length; i++) {

         let newCard = cardsArray.pop();
         let newCardClass = cardChild[i];
         matchArray.push(cardsArray[i]);

         newCardClass.className += newCard;
         console.log(cardsArray);
     }; }

问候!此函数使用.pop()作为DOM元素中的类来“弹出” cardsArray元素。我的最终结果需要是两个相同的数组(cardsArray和matchArray)。我越来越近了但是,当我console.log matchArray时,它返回:

 ['a','b','c',undefined,undefined,undefined]

我认为

 matchArray.push(cardsArray[i]);

但不确定。有谁知道为什么它不返回重复的元素?

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在将数组从第一个位置复制到最后一个位置。 但是,通过添加pop(),每次使用pop时,您还将删除最后一个项目,因此,有一半的未清数结束。

pop替换为unshift(),这将解决您的问题。

我并没有真正了解代码的用途,但是html可能会帮助您添加代码。

希望这会有所帮助:>

//const cardChild = document.querySelectorAll('.card i');
 const cardsArray = ['a','a','b','b','c','c']; 
 const matchArray = [];

function cardsToClass() {
     for (i = 0; i < cardsArray.length; i++) {

         let newCard = cardsArray.unshift();
         //let newCardClass = cardChild[i];
         matchArray.push(cardsArray[i]);

         //newCardClass.className += newCard;

     };
console.log(cardsArray);
console.log(matchArray);
}
     
cardsToClass() 

答案 1 :(得分:0)

之所以会这样,是因为.pop实际上修改了源数组。

请参见documentation


由于.pop修改了cardsArray,所以数组实际上随着循环的进行而缩小。

对于循环的每次迭代,cardsArray的开头为:

  1. cardsArray = ['a','b','c','a','b','c'];
  2. cardsArray = ['a','b','c','a','b'];
  3. cardsArray = ['a','b','c','a'];
  4. cardsArray = ['a','b','c'];
  5. cardsArray = ['a','b'];
  6. cardsArray = ['a'];

由此可见,i = 2的第三次迭代(cardsArray[i])是undefined