JavaScript - 将动态键中的键/值数据获取到动态键中

标签 javascript jquery json

我有一个包含两个嵌套动态键的 var 数据。

我没有读取键“key_1”的内容值

var A = '"' + 123456789 + '"';
var B = '"' + 987654321 + '"';

var AA = '"' + 42 + '"';

var data = {
    "123456789":{
        "42":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_2":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_3":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        }
    },
    "987654321":{
        "DYNAMIC_KEY_1":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_2":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_3":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        }
    }
}

alert(data[A][AA]["key_1"]);

未捕获类型错误: 无法读取未定义的属性“42”

我尝试了几种解决方案,但没有!

有人可以解释一下如何继续吗?谢谢:)

--- 更新 ---

很奇怪,应用了你的建议,我仍然有同样的错误......

在我的代码中,var A 是由函数中的数字变量提供的全局变量 (productID)。

var AA 也对应于另一个文件中的变量(userID),该变量通常是数字变量。

    var room;

    function ioJoin(Mid){

        room = Mid;

        var _localuserid = LS.wpbp.id;

        var trackdata = {};
        var users = {};

        users[_localuserid] = {
            active: true,
            time: $.now(),
            user: LS.wpbp.id,
            productID: Mid
        }

        trackdata[Mid] = users

        socket.emit('send:newuser', trackdata);

    }

    socket.on("load:joinroom", function(data) {

        var _localuserid = LS.wpbp.id;

        // room & _localuserid are numbers
        alert(data[room][_localuserid]["active"]);

    });

我真的不明白问题出在哪里!

最佳答案

请勿在属性名称中添加引号。 '"' + 123456789 + '"' 为您提供值 '"123456789"' (请注意开头和结尾的双引号,实际上是 字符串)。您只需要'123456789'

所以:

var A = '123456789';
var B = '987654321';

var AA = '42';

实例:

var A = '123456789';
var B = '987654321';

var AA = '42';

var data = {
    "123456789":{
        "42":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_2":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_3":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        }
    },
    "987654321":{
        "DYNAMIC_KEY_1":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_2":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_3":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        }
    }
}

alert(data[A][AA]["key_1"]);

对于其中没有前导零的情况,您甚至可以完全取消引号并使用数字(这将被 [] 强制转换为字符串)。

实例:

var A = 123456789;
var B = 987654321;

var AA = 42;

var data = {
    "123456789":{
        "42":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_2":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_3":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        }
    },
    "987654321":{
        "DYNAMIC_KEY_1":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_2":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        },
        "DYNAMIC_KEY_3":{
            "key_1":"value_1",
            "key_2":"value_2",
            "key_3":"value_3"
        }
    }
}

alert(data[A][AA]["key_1"]);

关于JavaScript - 将动态键中的键/值数据获取到动态键中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30193438/

相关文章:

javascript - 调试 domjs 和 highcharts

javascript - 替换 HTML 中的标签

java - 有没有现成的组件可以将java *.properties文件转换成对应的json?

javascript - 我尝试使用 for 循环来保持 DRY 编码方式,但输出让我感到困惑 [关闭问题]

javascript - 测试扩展类时的 ES6 基类( super 方法)的 Jest 模拟方法

java - 如何将servlet的json输出发送到jsp?

javascript - 简单的 D3 国家 map

c++ - 如何注册一个类以在 Qt 中的 QWebChannel 信号中使用它

javascript - 将变量放入 onclick 定义中是否安全?

javascript - 在调用对象中选择元素父级