74

如何仅在 Javascript 中获取每个对象的名称和值?

4

4 回答 4

147

有两种方法可以访问对象的属性:

var obj = {a: 'foo', b: 'bar'};

obj.a //foo
obj['b'] //bar

或者,如果您需要动态执行此操作:

var key = 'b';
obj[key] //bar

如果您还没有将其作为对象,则需要将其转换为.

对于更复杂的示例,假设您有一个代表用户的对象数组:

var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
             {name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];

要访问第二个用户的年龄属性,您可以使用users[1].age. 要访问第一个用户的第二个“favoriteFood”,您可以使用users[0].favoriteFoods[2].

另一个例子:obj[2].key[3]["some key"]

这将访问名为 2 的数组的第三个元素。然后,它将访问该数组中的“key”,转到该数组的第三个元素,然后访问属性 name some key


正如 Amadan 所指出的,可能还值得讨论如何遍历不同的结构。

要遍历数组,可以使用简单的 for 循环:

var arr = ['a', 'b', 'c'],
    i;
for (i = 0; i < arr.length; ++i) {
    console.log(arr[i]);
}

循环一个对象有点复杂。如果您绝对肯定该对象是普通对象,则可以使用普通for (x in obj) { }循环,但添加hasOwnProperty检查会更安全。在您无法验证对象不具有继承属性的情况下,这是必需的。(它还对代码进行了一些未来的证明。)

var user = {name: 'Corbin', age: 20, location: 'USA'},
    key;

for (key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(key + " = " + user[key]);
    }
}    

(请注意,我假设您使用的任何 JS 实现都有console.log. 如果没有,您可以使用alert或某种 DOM 操作来代替。)

于 2012-12-25T06:30:42.890 回答
20

试试 Douglas Crockford 在github 上的 JSON Parser 。然后,您可以简单地从您的 String 变量中创建一个 JSON 对象,如下所示:

var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}'

var JSONObject = JSON.parse(JSONText);
var c = JSONObject["c"];
var o = JSONObject["o"];
于 2012-12-25T06:35:17.283 回答
8

好的,这是JS代码:

var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}')

for (var event in data) {
    var dataCopy = data[event];
    for (data in dataCopy) {
        var mainData = dataCopy[data];
        for (key in mainData) {
            if (key.match(/name|value/)) {
                alert('key : ' + key + ':: value : ' + mainData[key])
            }
        }
    }
}​

在这里提琴

于 2012-12-25T06:55:11.213 回答
5
var yourobj={
"c":{
    "a":[{"name":"cable - black","value":2},{"name":"case","value":2}]
    },
"o":{
    "v":[{"name":"over the ear headphones - white/purple","value":1}]
},
"l":{
    "e":[{"name":"lens cleaner","value":1}]
},
"h":{
    "d":[{"name":"hdmi cable","value":1},
         {"name":"hdtv essentials (hdtv cable setup)","value":1},
         {"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]
}}
  • 首先,组织起来是个好主意
  • 顶级引用必须是比 a..v... 等更方便的名称
  • 在 ov,oie 中不需要数组 [] 因为它是一个 json 条目

我的解决方案

var obj = [];
for(n1 in yourjson)
    for(n1_1 in yourjson[n])
        for(n1_2 in yourjson[n][n1_1])
            obj[n1_2[name]] = n1_2[value];

批准代码

for(n1 in yourobj){
    for(n1_1 in yourobj[n1]){
    for(n1_2 in yourobj[n1][n1_1]){
            for(n1_3 in yourobj[n1][n1_1][n1_2]){
      obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value;
            }
    }
 }
}
console.log(obj);

结果

*使用 [] 方法或点符号时应使用区分配件

证明

于 2012-12-25T06:49:53.403 回答