【问题标题】:Getting the name of an array under another array获取另一个数组下的数组名
【发布时间】:2015-09-09 00:28:59
【问题描述】:

假设我有这个代码:

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?

【问题讨论】:

  • 不要这样做:拆分您的数据和演示文稿。如果您需要本地化内容或更改名称,它会让您以后的生活更轻松。

标签: javascript jquery html arrays


【解决方案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]
  }
}

【讨论】:

  • 好的,所以你真的需要把 name: 和 items: 这样。我会先测试一下,如果一切顺利,我会接受。
  • @Selim:还有其他可能性,但这是按特定顺序获取项目的最简单方法。对象中的属性名nameitems,自然可以随意改成你喜欢的。
  • 对其进行了测试,并与我现在拥有的代码一起正常工作。谢谢你的回答。我读过的其他内容要求我重写所有已完成的代码。再次感谢!
【解决方案2】:

只需使用 for 循环来遍历 simple 并替换。

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

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

【讨论】:

    【解决方案3】:

    这允许您迭代对象的属性

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

    除非您使用像

    这样的双引号,否则不能像您在对象表示法属性名称中建议的那样使用空格
    obj = {"prop 1": [1,2,3]}
    
    var t = obj["prop 1"]
    

    【讨论】:

      【解决方案4】:

      对于您的第一个问题,可以使用Object.keys() 方法将键作为字符串。我不打算在这里写示例,因为我之前提供的文档中有大量的 sn-ps 向您展示如何使用它。正如 Matthew Christianson 在其他答案中指出的那样,其他解决方案是使用 for 循环遍历键。

      是的,您可以使用以空格命名的键,但是当您调用它们时,请务必使用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

      【讨论】:

        【解决方案5】:

        试试这个,它是一个如何将数组打印为字符串的示例。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-24
          相关资源
          最近更新 更多