获取另一个数组下的数组名称

时间:2015-09-08 15:53:47

标签: javascript jquery html arrays

假设我有这段代码:

var simple = {
Cicatrix: ["Rock", "Bottom", "Stunner"],
Yen_Sid: ["Pirate", "Heroes", "Power"],
};

调用Rock,Bottom,Stunner等很容易。

document.write(simple.Cicatrix[0]);

然而,如果我想得到Cicatrix和Yen_Sid这个词怎么办?我希望它们被调用,因为我将它们用作菜单。

也可以在数组名称中包含空格吗?就像Yen_Sid转向Yen Sid一样。或者我应该做.replace?

5 个答案:

答案 0 :(得分:1)

只需使用for循环通过替换simple

var simple = {
Cicatrix: ["Rock", "Bottom", "Stunner"],
Yen_Sid: ["Pirate", "Heroes", "Power"],
};

for(x in simple)
  console.log(x.replace('_',' '));

答案 1 :(得分:1)

这允许您迭代对象的属性

  for (var property in object) {
        if (object.hasOwnProperty(property)) {
            // do stuff
        }
    }

除非你使用像

这样的双引号,否则你不可能在对象表示法属性名称中有空格。
obj = {"prop 1": [1,2,3]}

var t = obj["prop 1"]

答案 2 :(得分:1)

对于您的第一个问题,可以使用Object.keys()方法将密钥作为字符串。我不打算在这里写例子,因为我之前提供的文档有很多片段,告诉你如何使用它。其他解决方案是使用for循环来循环键,正如Matthew Christianson在其他答案中指出的那样。

是的,您可以拥有以空格命名的密钥,但是当您调用它们时,请务必使用object.[property]表示法,例如:

var x = {
    "a b c" : 1234
}

console.log(x["a b c"]); // will log "1234" to Console!

我不建议您使用带空格的名称,因为在我看来,使用括号表示法会使代码变得有点混乱。但您可以创建另一个对象,其键是主对象的键,值是正确的拼写名称,如:

var names = {
   YenSid : "Yen Sid",
   SomeName : "Some name",
   SomeOtherName : "Some other name"
}

var properObject = {
   YenSid = 123,
   SomeName = 456,
   SomeOtherName = 789
}

要获得正确的名称,请使用names.YenSid

答案 3 :(得分:1)

是的,你可以在属性名称中包含空格,你只需要一个分隔符:

var simple = {
  Cicatrix: ["Rock", "Bottom", "Stunner"],
  "Yen Sid": ["Pirate", "Heroes", "Power"],
};

但是,如果要按特定顺序循环输出项目,则不希望它们作为对象属性,而是将它们作为数组中的项目。对象中的属性没有特定的顺序,因此当您循环输出属性时,顺序取决于浏览器中的实现,而不同的浏览器以不同的顺序为您提供属性。

var simple = [
  { name: "Cicatrix", items: ["Rock", "Bottom", "Stunner"] },
  { name: "Yen Sid", items: ["Pirate", "Heroes", "Power"] }
];

要遍历项目和子项,您只需要一个嵌套循环:

for (var i = 0; i < simple.length; i++) {
  // menu item is in simple[i].name
  // subitems are in simple[i].items:
  for (var j = 0; j < simple[i].items.length; j++) {
    // subitem is in simple[i].items[j]
  }
}

答案 4 :(得分:1)

试试这个,这是一个如何将数组打印成字符串的例子。

var text = "";
$.each(simple, function(k) {
    text = text + "// " + k + " contains: ";
    for ( var i = 0, l = $(this).length; i < l; i++ ) {    
            text = text + $(this)[i] + ", ";
    }
});

console.log(text);