JavaScript:Association/Object数组中的indexOf
JavaScript: indexOf in Associative/Object array?
我有这个数组:
var skins = {};
skins.w = "http://example.com/public/images/char_elements/base.png";
var eyes = {};
eyes.b = "http://example.com/public/images/char_elements/eyes/blue.png";
eyes.g = "http://example.com/public/images/char_elements/eyes/green.png";
eyes.r = "http://example.com/public/images/char_elements/eyes/red.png";
var hair = {};
hair.b = "http://example.com/public/images/char_elements/hair/black.png";
hair.w = "http://example.com/public/images/char_elements/hair/blond.png";
hair.s = "http://example.com/public/images/char_elements/hair/brown.png";
var mouth = {};
mouth.h = "http://example.com/public/images/char_elements/mouth/happy.png";
var pants = {};
pants.s = "http://example.com/public/images/char_elements/pants/shorts.png";
var shoes = {};
shoes.b = "http://example.com/public/images/char_elements/shoes/black.png";
var torso = {};
torso.s = "http://example.com/public/images/char_elements/torso/shirt.png";
这个功能:
function SwitchElement(type){
switch(type){
case "eyes":
var cur = eyes.indexOf(document.getElementById(type).src);
console.log(cur);
// var eyesId = document.getElementById("
break;
}
}
所有这些都被称为:
<img class="builder_control_front" src="http://claro.mib.infn.it/arrow.png" onclick="SwitchElement('eyes');"/>
所以基本上,当用户点击箭头时,它会调用javascript函数来加载当前图像,获取元素所在数组的索引(在本例中为数组:"eyes"),并在其中循环
我需要通过url获取索引,当我尝试使用indexOf它抛出Undefined时,我读到如果数组有命名索引,JavaScript会将数组转换为Object。
所以周,我可以得到当前加载图像的索引吗?
注意:我需要一个数组,它的代码有:b,g,r,w,w4,b3等。。所以改为普通数组不是一个很好的选择,也许改为多维数组会更好?
为什么不迭代对象并找到包含值的密钥:
function findKey(obj, value) {
for (var key in obj) {
if (obj[key] == value) return key
}
return null;
}
var key = findKey(eyes, document.getElementById(type).src);
if (key != null) {
} else {
}
您需要的是反向查找。假设你所有的URL都是唯一的,你可以创建一个这样的:
function invert(obj) {
var newObj = {};
for(var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[obj[key]] = key;
}
}
}
var hair = {};
hair.b = "http://example.com/public/images/char_elements/hair/black.png";
hair.w = "http://example.com/public/images/char_elements/hair/blond.png";
hair.s = "http://example.com/public/images/char_elements/hair/brown.png";
var hairReverse = invert(hair);
var url = "http://example.com/public/images/char_elements/hair/black.png";
console.log(hairReverse[url]); // logs "b"
如果你使用Lodash/Undercore,它有一个内置的反转功能:
var hairReverse = _.invert(hair);
相关文章:
- inArray,indexOf在二维数组中
- 为什么空数组上的 indexOf 不返回 -1
- 对象不支持在调用 indexOf 定义的数组时 IE8 中未定义的此属性或方法
- 使用Javascript在mongo中数组indexOf
- Javascript性能:如何在数组中循环并检查每个值比indexOf、search和match更快
- 数组表示形式内的字符串IndexOf
- javascript indexOf 无法检查数组中的相同数字
- JavaScript:Association/Object数组中的indexOf
- Google Sheets/Javascript:无法使用indexOf()在数组中搜索特定字符串
- 在使用JavaScript的IE7/8中,数组上的.indexOf函数不起作用
- 带IndexOf的Undercore reject函数从数组中删除所有对象
- javascript数组indexOf中使用的regex
- 为什么 array.indexOf(undefined) 在数组稀疏的情况下不起作用
- 在数组中查找 indexOf 值
- 如何使用 indexOf 方法检查数组中是否存在“未定义”
- 使用 indexOf 方法在二维数组中查找值
- IndexOf 不能与包含数组的对象一起正常工作
- Javascript Array.indexOf() 在应用于对象数组时表现出奇怪的行为
- JavaScript数组indexOf数组
- javascript indexOf数组在浏览器上的不同结果