Javascript 数组和检查内部值时出现问题
您好,最近我正在使用JavaScript处理数组,在函数方面出现了一个小问题 我的问题在函数checkRepeat中,在这个函数中,我试图知道我之前是否单击了一张卡,当我单击第一张卡工作,但其他卡不工作时,我想我的问题可能是循环,因为它可能只占用一个元素,但我不知道 这是我的代码:Javascript 数组和检查内部值时出现问题,javascript,Javascript,您好,最近我正在使用JavaScript处理数组,在函数方面出现了一个小问题 我的问题在函数checkRepeat中,在这个函数中,我试图知道我之前是否单击了一张卡,当我单击第一张卡工作,但其他卡不工作时,我想我的问题可能是循环,因为它可能只占用一个元素,但我不知道 这是我的代码: const cardArray = [ {name: 'fries'}, {name: 'pizza'}, {name: 'hotdog'}, {name: 'cheeseburger
const cardArray = [
{name: 'fries'},
{name: 'pizza'},
{name: 'hotdog'},
{name: 'cheeseburger'},
{name: 'milkshake'},
{name: 'ice-cream'}
]
const emptyCard = [
{name: 'white'},
{name: 'blank'}
]
// the format of the img
const format = '.png'
// I select the place where I gonna put the board
const grid = document.querySelector('.grid');
const cardsChosen = [];
const cardsChosenId = [];
const createBoard = () =>{
for(let n = 0; n < cardArray.length*2; n++)
{
// I create the img
let card = document.createElement('img');
card.src = `images/${emptyCard[1].name}${format}`;
card.id = `card-${n}`
card.addEventListener('click',flipCard)
grid.appendChild(card)
}
}
function flipCard(){
// I get the id, just the number
let cardId = parseInt(this.getAttribute('id').slice(5,7));
const v1 = checkRepeat(cardsChosenId,cardId);
console.log("Value: ",v1)
//console.log("Values in the array: ",cardsChosenId)
}
function checkRepeat(array,value){
if(array.length === 0){// if the array is empty
array.push(value);//push in the array the value
return true;// and return true
}
else{// if isn't
for(let i = 0; i < array.length; i++){// walk through the array
if(array[i] === value){// check if the values of the array === value
return false;
}
else{// if the value and the array values are different
array.push(value);//push the value
return true;
}
}
}
}
createBoard();
const cardArray=[
{name:'fries'},
{name:'pizza'},
{name:'热狗'},
{name:'奶酪汉堡'},
{name:'奶昔'},
{name:'冰淇淋'}
]
常数emptyCard=[
{name:'white'},
{name:'blank'}
]
//img的格式
常量格式='.png'
//我选择了我要放黑板的地方
const grid=document.querySelector('.grid');
常数cardsChosen=[];
常量cardsChosenId=[];
const createBoard=()=>{
for(设n=0;n
我在代码中发现了错误,问题在于逻辑
因为当它遍历数组时,它会找到一个相等的值,但它会继续遍历数组和其他值与比较值不相似,因此它会添加相同的值在数组中稍后给我
我解释:
当我点击每张卡片时,它们会将id保存在一个排列中,如果我再次点击我之前给它的卡片,它会与每个元素进行比较,当它找到相同的元素时,它会返回false,但会继续滚动整个排列,并在我不应该的时候向排列中添加更多元素
例如:
我点击第一个元素,[0]被保存,我点击第二个[0,1],我再次给出第二个元素,当比较0和1时,我发现它们不同,当它只返回[0,1]时,仍然是这样的[0,1,1]
我决定包括:
function checkRepeat(array,value){
if(array.includes(value)){//return true if value it's in the array
return false;
}
else{
array.push(value);
return true;
}
}
我在代码中发现了错误,问题在于逻辑 因为当它遍历数组时,它会找到一个相等的值,但它会继续遍历数组和其他值与比较值不相似,因此它会添加相同的值在数组中稍后给我 我解释: 当我点击每张卡片时,它们会将id保存在一个排列中,如果我再次点击我之前给它的卡片,它会与每个元素进行比较,当它找到相同的元素时,它会返回false,但会继续滚动整个排列,并在我不应该的时候向排列中添加更多元素 例如: 我点击第一个元素,[0]被保存,我点击第二个[0,1],我再次给出第二个元素,当比较0和1时,我发现它们不同,当它只返回[0,1]时,仍然是这样的[0,1,1] 我决定包括:
function checkRepeat(array,value){
if(array.includes(value)){//return true if value it's in the array
return false;
}
else{
array.push(value);
return true;
}
}
“它们不工作”并没有为我们提供任何有意义的调试细节。发生了什么,与预期有什么不同,您进行了哪些故障排除,是否存在错误等?除非您需要阵列,否则我认为对象或贴图更适合您的情况。抱歉,让我解释得更好,当我点击卡片时,我保存了我之前设计的号码,在我遇到问题的函数中,我会遍历整个排列,只有当数组中存储了值时,它才会返回true或false,当它遍历数组并发现一个与我比较的值相等的值时,它可能返回false,但之后它继续遍历同一数组并将该值添加到数组中,因为它将它与一个完全不同的数组进行比较?您可以将整个id存储在数据id属性中。为了进行检查,如果数组包含元素,请使用includes方法,最好使用一个集合。“它们不起作用”不会为我们提供任何有意义的调试细节。发生了什么,与预期有什么不同,您进行了哪些故障排除,是否存在错误等?除非您需要阵列,否则我认为对象或贴图更适合您的情况。抱歉,让我解释得更好,当我点击卡片时,我保存了我之前设计的号码,在我遇到问题的函数中,我会遍历整个排列,只有当数组中存储了值时,它才会返回true或false,当它遍历数组并发现一个与我比较的值相等的值时,它可能返回false,但之后它继续遍历同一数组并将该值添加到数组中,因为它将它与一个完全不同的数组进行比较?您可以将整个id存储在数据id属性中。为了进行检查,如果数组包含元素,请使用includes方法,最好使用一个集合。