首页 > 解决方案 > 数组中的 indexOf 返回 -1 而不是索引号

问题描述

当我将“orderOfPlanets”传递给我的 each(){}; 函数,我希望得到行星的名称和相应的索引号,但是我每次都得到-1。为什么是这样?

var mostEvil = {
    Cthulhu: "Most evil",
    Dracula: "Fairly evil",
    Voldermort: "Pretty damn evil",
    Sauron: "Ridiculously evil"
};

var orderOfPlanets = ["Mercury", "Venus", "Earth", "Mars"];

function each(input, callback) {
    if (Array.isArray(input)) {
        for (var i = 0; i < orderOfPlanets.length; i++) {
            var name = orderOfPlanets[i];
            var val = orderOfPlanets.indexOf(i);
            callback(val, name);
        }
    } else if (typeof input == "object") {
        for (var key in input) {
            var name = key;
            var val = input[key];
            callback(val, name);
        }
    }
}

each(orderOfPlanets, function(val, name) {
    console.log("The value of " + name + " is " + val);
});

水星的值为 0 金星的值为 1 地球的值为 2 火星的值为 3

标签: javascriptarraysloopsindexingindexof

解决方案


indexOf名字的不是 i (索引)

var mostEvil = {
    Cthulhu: "Most evil",
    Dracula: "Fairly evil",
    Voldermort: "Pretty damn evil",
    Sauron: "Ridiculously evil"
};

var orderOfPlanets = ["Mercury", "Venus", "Earth", "Mars"];

function each(input, callback) {
    if (Array.isArray(input)) {
        for (var i = 0; i < orderOfPlanets.length; i++) {
            var name = orderOfPlanets[i];
            //var val = orderOfPlanets.indexOf(i);
            var val = orderOfPlanets.indexOf(name);
            callback(val, name);
        }
    } else if (typeof input == "object") {
        for (var key in input) {
            var name = key;
            var val = input[key];
            callback(val, name);
        }
    }
}

each(orderOfPlanets, function(val, name) {
    console.log("The value of " + name + " is " + val);
});

回归同样有效i

var mostEvil = {
    Cthulhu: "Most evil",
    Dracula: "Fairly evil",
    Voldermort: "Pretty damn evil",
    Sauron: "Ridiculously evil"
};

var orderOfPlanets = ["Mercury", "Venus", "Earth", "Mars"];

function each(input, callback) {
    if (Array.isArray(input)) {
        for (var i = 0; i < orderOfPlanets.length; i++) {
            var name = orderOfPlanets[i];
            //var val = orderOfPlanets.indexOf(i);
            var val = i;
            callback(val, name);
        }
    } else if (typeof input == "object") {
        for (var key in input) {
            var name = key;
            var val = input[key];
            callback(val, name);
        }
    }
}

each(orderOfPlanets, function(val, name) {
    console.log("The value of " + name + " is " + val);
});


推荐阅读