我正在尝试获取数组的indexOf,但是在警报中我不断得出-1的结果。谁能告诉我我在这里做错了什么?
我已经使用nextcubetypearray尝试将nextcubetype作为数组使用,结果相同。
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div class="cube Dirt1"></div>
<div class="cube Dirt2"></div>
<div class="cube Dirt3"></div>
<script>
var Dirt1 = new Object();
Dirt1.Name = 'Dirt1';
Dirt1.Level = '1';
var Dirt2 = new Object();
Dirt2.Name = 'Dirt2';
Dirt2.Level = '1';
var Dirt3 = new Object();
Dirt3.Name = 'Dirt3';
Dirt3.Level = '2';
var terrain = new Array(Dirt1, Dirt2, Dirt3);
$(".cube").each(function(index) {
var thiscubetype = $(this).attr('class').split(' ')[1];
var nextcubetype = $(this).next().attr('class').split(' ')[1];
var nextcubetypearray = new Array(nextcubetype);
var nextcubeindex = terrain.indexOf(nextcubetype);
alert(nextcubeindex);
});
</script>
</body>
我需要包含nextcubetype的terrain数组的索引
答案 0 :(得分:1)
您正在寻找对象数组中的索引,但使用对象属性作为标准。
尝试获取名称数组,然后找到索引,如本例所示:
var nextcubeindex = terrain.map(n => n.Name).indexOf(nextcubetype);
答案 1 :(得分:0)
您需要将类名转换为对象:
var thiscubetype = $(this).attr('class').split(' ')[1];
var nextcubetype = $(this).next().attr('class').split(' ')[1];
var nextcubetypearray = new Array(nextcubetype);
//convert string to the Dirt object
var nextcubetypeObj = nextcubetype == "Dirt1" ? Dirt1 : nextcubetype == "Dirt2" ? Dirt2 : Dirt3;
var nextcubeindex = terrain.indexOf(nextcubetypeObj);
另一种方法是创建一个对象进行映射
var mapping = {
"Dirt1" : Dirt1,
"Dirt2" : Dirt2,
"Dirt3" : Dirt3
}
然后映射[nextcubetype]以获取污垢对象
答案 2 :(得分:0)
indexOf
返回数组中元素的索引。 nextcubetype
只是一个字符串,而terrain
是一个对象数组。因此,您可以使用findIndex
。
(最后一个元素将失败,因为$(this).next().attr('class')
将是未定义的。因此,您需要单独处理它)
var Dirt1 = {
Name: 'Dirt1',
Level: '1'
}
var Dirt2 = {
Name: 'Dirt2',
Level: '1'
}
var Dirt3 = {
Name: 'Dirt3',
Level: '2'
}
var terrain = new Array(Dirt1, Dirt2, Dirt3);
$(".cube").each(function(index) {
var thiscubetype = $(this).attr('class').split(' ')[1];
var nextcubetype = $(this).next().attr('class').split(' ')[1];
var nextcubetypearray = new Array(nextcubetype);
var nextcubeindex = terrain.findIndex(t => t.Name === nextcubetype);
alert(nextcubeindex);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="cube Dirt1"></div>
<div class="cube Dirt2"></div>
<div class="cube Dirt3"></div>
此外,您可以使用{}
而不是Object
构造函数来创建对象文字。