我使用indexOf有什么问题?

时间:2017-02-21 05:08:50

标签: javascript

我试图找到div的innerHTML在数组中的位置。我正在制作一个15滑块游戏(它在4x4网格中加扰,你需要将它安排回来)。我能够成功获得1-15的瓦片编号(innerHTML),但是当我尝试找到它在全局数组中的位置时(非重复值0-15,0代表空白值),它只返回-1。你能看出我这样做有什么问题吗?

var grid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ,15 ,0];

function move() {
    var tileNum = this.innerHTML;
    var ind = grid.indexOf(tileNum);
    var blankInd = grid.indexOf(0);
    console.log(tileNum);
    console.log(ind);
    console.log(blankInd);
}

3 个答案:

答案 0 :(得分:2)

.innerHTML属性返回一个字符串。您需要将其转换为数字或与数字数组元素("1" !== 1)不匹配:

// using unary plus operator:
var tileNum = +this.innerHTML;
// OR:
var tileNum = Number(this.innerHTML);

答案 1 :(得分:1)

内部HTML总是返回一个字符串值作为结果。在找到索引之前,您必须将其解析为int。



<!DOCTYPE html>
<html>

<head>
    <script>
        var grid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ,15 ,0];

		function move() {
			var tileNum = "5";
			var ind = grid.indexOf(parseInt(tileNum));
			var blankInd = grid.indexOf(0);
			console.log(tileNum);
			console.log(ind);
			console.log(blankInd);
		}
        
        move();
    </script>
</head>
</html>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

只需将字符串解析为数字即可正常工作

var grid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ,15 ,0];

function move() {
	var tileNum = parseInt(this.innerHTML);
	var ind = grid.indexOf(tileNum);
	var blankInd = grid.indexOf(0);
	console.log(tileNum);
	console.log(ind);
	console.log(blankInd);
}
 move();