Javascript indexOf方法不能在Object中使用整数

时间:2012-05-25 23:24:34

标签: javascript

我做了一个小提琴:

http://jsfiddle.net/csS24/

我正试图让代码达到一定程度,它永远不会同时显示相同的两个项目,或者当单击一个项目时,它永远不会从数组中拉回相同的项目,只是似乎在努力逻辑很少,而indexOf方法表现得很奇怪。

var justAdded = [];
justAdded['first'] = 0;
justAdded['second'] = 1;

newHtml = returnRandom().split('|');

justAdded[e.id] = parseInt(newHtml[0], 10);

    if(justAdded.indexOf(parseInt(newHtml[0], 10)) == -1){
        e.style.opacity = 0;
        e.innerHTML = newHtml[1];
        e.style.opacity = 1;
        e.setAttribute('data-id', newHtml[0]);
    } else {
        uniq(clickedEl);
    }

var returnRandom = function(){
    return options[Math.floor(Math.random() * options.length)]
};

e.id将等于'first'或'second'。 returnRandom()将从options数组中获取一个随机值:

var options = [
    '0|Flash',
    '1|Internet Explorer',
    '2|Java',
    '3|!important'
];

1 个答案:

答案 0 :(得分:2)

您似乎正在将非数字属性添加到数组中。

indexOf()方法旨在处理并返回数字属性。

...此外

  • processAnswer处理程序将元素的ID传递给addHtml ...就像“第一个”,“第二个”

  • addHtml使用该ID字符串来获取存储在具有相同名称的变量中的相同元素,然后将该元素传递给uniq

  • uniqjustAdded数组添加属性,键是元素的ID。

您不断在传递元素及其ID之间切换,并使用该元素在每个下一个函数中获取另一个元素。这就是说你的代码看起来非常混乱,我认为你只需要从头开始并重新思考你的代码。


另外,这到底是什么意思?...

var options = [
    '0|Flash',
    '1|Internet Explorer',
    '2|Java',
    '3|!important'
];

为什么要将索引硬编码到数组中的字符串?数组是有序列表。他们已经掌握了指数。

var options = [
    'Flash',                // 0
    'Internet Explorer',    // 1
    'Java',                 // 2
    '!important'            // 3
];