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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8730262/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 04:24:21  来源:igfitidea点击:

Extract keys from JavaScript object and use as variables

javascriptarraysobjectextract

提问by

There is a method in PHP called extractwhich does exactly what I want to do here. Say I have an object that looks like this:

PHP 中有一个方法叫做extract,它完全符合我在这里想做的事情。假设我有一个看起来像这样的对象:

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

I want to run a method like extract(data)so that I can then access the properties in that object by just using nameand age, instead of data.nameand data.age.

我想运行一个类似的方法,extract(data)这样我就可以通过使用nameandage而不是data.nameand来访问该对象中的属性data.age

I've done a bit of Googling and couldn't find anything.

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

采纳答案by redShadow

You can use something like this:

你可以使用这样的东西:

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

(Try that here: http://jsfiddle.net/dHDxd/3/)

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

Or even export them to global namespace, by using window[key] = data[key]. In any case, be very very careful with that, since the risk of clobbering the global namespace / override other stuff / etc. is very high.

甚至可以使用window[key] = data[key]. 在任何情况下,都要非常小心,因为破坏全局命名空间/覆盖其他东西/等的风险非常高。

Update: general-purpose extract()

更新:通用 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();

回答by biesiad

Here is more generic/multi-level/recurrent namespace extractor :)

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

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'));

回答by qrsngky

It seems like it is just like the "with" statement.

似乎就像“with”语句一样。

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!"