indexOf в массиве возвращает -1 вместо номера индекса - PullRequest
0 голосов
/ 11 июля 2019

Когда я передаю '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

1 Ответ

4 голосов
/ 11 июля 2019

Взять indexOf имени, а не я (индекс)

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);
});
...