【发布时间】:2019-11-21 08:40:53
【问题描述】:
当我将 '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
【问题讨论】:
-
您将索引传递给
indexOf。这没有意义。 -
你已经有
i;indexOf是多余的... -
indexOf在数组中查找元素并返回索引。因此,例如orderOfPlanets.indexOf('Venus')将返回 1。您传递的是 i,它是索引,而不是名称。你到底想让它做什么? -
数组有一个内置的
.forEach()方法。而Object.keys()、Obejct.values()和Object.entries()将一个对象转换为各种风格的数组。因此,如果您愿意,可以使用orderOfPlanets .forEach()和Object.entries( mostEvil ).forEach()。
标签: javascript arrays loops indexing indexof