【问题标题】:How can I get member names from an object? [duplicate]如何从对象中获取成员名称? [复制]
【发布时间】:2012-01-03 16:43:58
【问题描述】:

可能重复:
Getting JavaScript object key list
How to iterate json data in jquery

我有一个这样的json:

var myJSONObject = {
                    "flowers": [
                        {"id":"1","name":"Red Flower","url":"flower_1.png"},
                        {"id":"2","name":"Purple Flower","url":"flower_2.png"},
                        {"id":"3","name":"Yellow Flower","url":"flower_3.png"},
                        {"id":"4","name":"Violet Flower","url":"flower_4.png"},
                        {"id":"5","name":"Purple Flower","url":"flower_5.png"}
                    ],
                    "bouquet": [
                        {"first":[1,2,3,4,5,6]},
                        {"second":[1,2,3,4,5,6]},
                        {"third":[1,2,3,4,5,6]}
                    ]
            };

现在我的问题是如何仅将“花束”成员的名称...放入数组中。 看起来像这样的东西:["first","second","third"]?

【问题讨论】:

  • 这与 JSON 无关,JSON 是一种数据交换格式,而只是与 JavaScript 对象有关。
  • @FelixKling 和 John,这个问题与其他问题不同。如果您没有注意到:命名键是未知的。解决这个问题需要双循环。
  • @Rob W:不这么认为:for (var p in myJSONObject.bouquet) ...
  • @RobW:我明白你的意思了。不过,我会假设(我是一个乐观主义者)知道如何遍历数组。
  • @justsomebody 您的建议返回[object Object]s 的列表,而OP 想要["first",...]。这些“重复”正在处理[a, b, c] 类型的列表,而这个问题是关于[{a:..}, {b:..}, {c:..}]

标签: javascript


【解决方案1】:

在最近的火狐浏览器中,可以使用以下方式(所谓Array-comprehensions):

var list = [Object.keys(i)[0] for each (i in myJSONObject.bouquet)];

如果支持Object.keys,请使用:

var list = [];                        // Create list
for (var i=0; i<myJSONObject.bouquet.length; i++) {
    var keys = Object.keys(myJSONObject.bouquet[i]); //List keys
    list.push(keys[0]);               // Store first named key
}

在其他浏览器中,您可以使用:

var list = [];                        // Create list
for (var i=0; i<myJSONObject.bouquet.length; i++) {
    var key = myJSONObject.bouquet[i];
    for (var j in key) {              // Get the first named key
        list.push(j);                 // Store named key
        break;                        // <--- First named key, so break loop
    }
}

【讨论】:

【解决方案2】:
for(var i=0; i< myJSONObject["bouquet"].length; i++)
{
  var o = myJSONObject["bouquet"][i];
  document.write(Object.keys(o) + "<br>");
}

输出:第一第二第三

JSFiddle for confirmation

【讨论】:

  • 已经找到答案了...不过谢谢大家!
  • @BorisD 请注意此答案中的代码。 Object.keys 返回一个数组。如果您要以与答案类似的方式创建一个列表,您将得到一个数组,如:[['First'],['Second'],['Third']]。如果您想直接对列表中的元素执行字符串操作(例如charAt),这很重要。
【解决方案3】:

如果您处于支持现代 ECMA 添加的环境中,您可以使用 Object.keys (docs here) 或者您可以根据需要使用 polyfill,如下所示:

function getKeys(obj) {
    var ret = [], prop;

    for (prop in obj) {
        if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {
            ret.push( prop );
        }
    }

    return ret;
};

用法:

var keys = getKeys({ foo: "a", bar: "b" }); // -> ['foo', 'bar']

希望有帮助!干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 2016-07-17
    • 1970-01-01
    • 2020-11-02
    • 2018-06-08
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多