javascript - IndexOf 无法正确处理包含数组的对象

标签 javascript arrays duplicates listener indexof

我有下一个代码:

function insertIfNotThere(array, item) {
    /* Push the new element everytime: because return -1 */
    if (array.indexOf(item) === -1) {
        array.push(item);
    }
    /*But this log shows 1, 2, 3 and so on...*/
    console.log(array.length);

}

function EventManager(target) {
    var target = target || window, events = {};
    this.observe = function(eventName, cb) {
        if (events[eventName]){
           /* This insert the new event everytime: indexOf doesn't work... */
           insertIfNotThere(events[eventName], cb);
        }else{
           events[eventName] = []; events[eventName].push(cb);
        }
        return target;
    };

    this.fire = function(eventName) {
        if (!events[eventName]) return false;
        for (var i = 0; i < events[eventName].length; i++) {
        events[eventName][i].apply(target, Array.prototype.slice.call(arguments, 1));
        }
    };
}

我使用“insertIfNotThere”方法来检查具有指示内容的元素是否存在。但是...它插入了元素...我不知道发生了什么...

我用一个按钮创建了事件:如果我在其中单击多次,则会复制元素...

最佳答案

我按如下方式解决了这个问题:

function indexOf(array, item) {
    for (var i = 0; i < array.length; i++) {
        if (array[i].toString() === item.toString()) return i;
    }
    return -1;
}

此方法适用于我的代码。

关于javascript - IndexOf 无法正确处理包含数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355555/

相关文章:

javascript - 在angularJS中合并两个数组

mysql删除重复评论?

PowerShell,查找重复文件夹的更有效方法

ios - POST 请求花费的时间超过超时导致重复

javascript - Observable Race Condition,如何正确计时两个 Observables

php - SQL 结果作为 PHP 数组

javascript - 在 Vue 单文件组件中启用管道运算符的最简单方法

javascript - Jquery:匹配两个数组,字符串和对象的索引以替换对象中的文本?

javascript - 如何在 JavaScript 中输入时向输入元素添加货币模式?

javascript - 程序以奇怪的顺序运行?