从JavaScript对象中提取键并用作变量

时间:2012-01-04 16:30:24

标签: javascript arrays object extract

PHP中有一个名为extract的方法,它完全符合我的要求。假设我有一个看起来像这样的对象:

var data = {
    name: "Olly"
    age: 19
};

我想运行像extract(data)这样的方法,以便我可以通过使用nameage而不是data.name和{来访问该对象中的属性{1}}。

我做了一些谷歌搜索,找不到任何东西。

3 个答案:

答案 0 :(得分:8)

您可以使用以下内容:

function myTestFunction() {
    var data = {
        name: "Olly",
        age: 19,
    };
    for (var key in data) {
        this[key] = data[key];
    }
    alert(name +" is "+ age +"!");
}
myTestFunction();

(试试这里:http://jsfiddle.net/dHDxd/3/

甚至可以使用window[key] = data[key]将它们导出到全局命名空间。 无论如何,要非常小心,因为破坏全局命名空间/覆盖其他东西/等的风险非常高。

更新:通用extract()

function extract(data, where) {
    for (var key in data) {
        where[key] = data[key];
    }
}

function runTest() {
    var myData = { name: "Olly", age: 19, };
    extract(myData, this);
    alert(name +" is "+ age +"!");
}

runTest();

答案 1 :(得分:1)

这是更通用的/多级/循环命名空间提取器:)

function extract(rootObject, key) {
    var parts = key.split('.');
    var currentKey = parts.shift();
    return parts.length > 0 ? extract(rootObject[currentKey], parts.join('.')) : rootObject[currentKey];
}

var myObject = { a: { b: { c: 7 }}};
console.log(extract(myObject, 'a.b.c'));
console.log(extract(myObject, 'a'));

答案 2 :(得分:0)

好像它就像""言。

var data = {
    name: "Olly",
    age: 19,
};
with(data){
    alert(name +" is "+ age +"!"); //"Olly is age 19!"
    name = "Charlie";
    age = 28;
    alert(data.name +" is "+ data.age +"!"); //"Charlie is age 28!"
}
alert(data.name +" is "+ data.age +"!"); //"Charlie is age 28!"