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]);
但不确定。有谁知道为什么它不返回重复的元素?
谢谢!
答案 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
实际上修改了源数组。
由于.pop
修改了cardsArray
,所以数组实际上随着循环的进行而缩小。
对于循环的每次迭代,cardsArray
的开头为:
cardsArray = ['a','b','c','a','b','c'];
cardsArray = ['a','b','c','a','b'];
cardsArray = ['a','b','c','a'];
cardsArray = ['a','b','c'];
cardsArray = ['a','b'];
cardsArray = ['a'];
由此可见,i = 2
的第三次迭代(cardsArray[i]
)是undefined