Извлечение ключей из объекта JavaScript и использование в качестве переменных - PullRequest
6 голосов
/ 04 января 2012

В PHP есть метод с именем extract, который делает именно то, что я хочу сделать здесь. Скажем, у меня есть объект, который выглядит так:

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

Я хочу запустить метод, подобный extract(data), чтобы затем получить доступ к свойствам этого объекта, просто используя name и age вместо data.name и data.age.

Я немного погуглил и ничего не смог найти.

Ответы [ 3 ]

8 голосов
/ 04 января 2012

Вы можете использовать что-то вроде этого:

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 голос
/ 08 августа 2012

Вот более универсальный / многоуровневый / рекуррентный экстрактор пространства имен:)

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'));
0 голосов
/ 07 ноября 2014

Кажется, что это похоже на выражение "с".

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