JavaScript - 如何获取对象名称或关联数组索引名称?

8

我有一个类似于以下的JSON对象:

var list = {'name1' : {'element1': 'value1'}, 'name2' : {'element1': 'value2'});

如何提取所有nameX字符串值?

例如,假设我想将它们连接成一个字符串输出,例如:"name1 name2"

在任何解决方案中使用jQuery都可以。请建议......

4个回答

15

在ES5中,要获取对象的键,可以使用Object.keys方法返回一个数组:

Object.keys(list).join(" "); // "name1 name2"

如果你想要过滤键,你可以使用 .filter

Object.keys(list).filter(function(key) {
  return key.indexOf("name") === 0; // filter keys that start with "name"
}).join(" "); // "name1 name2"

1
不过需要注意的是,keys方法是在1.8.5+版本中引入的。如果您需要向后兼容,您可能更喜欢使用其他替代方案,例如来自underscore.js的_.keys shim(@mVChr的答案提供了另一种选择)。 - rjz

5
var names = Object.keys(list);

4

对于不支持 keys 的旧版浏览器:

var list_keys = []
for (var n in list) {
    list_keys.push(n)
}
var names = list_keys.join(' ');

你应该包含一个 hasOwnProperty 测试:if (list.hasOwnProperty(n)) - RobG

2

既然您说基于jQuery的解决方案可以,那么这里有一种使用jQuery实现的方式,不需要ES5 shim:

var itemString = $.map(list, function(item, key) {
    return(key);
}).join(" ");

这里有演示效果:http://jsfiddle.net/jfriend00/a2AMH/

jQuery.map() 迭代对象的属性或数组的项,并基于我们传递给它的自定义函数构建一个新的数组。然后,我们只需将该数组的结果连接成字符串即可。您可以在此处了解有关jQuery.map()的更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接