Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Присвоить свойство объекта другому без eval (https://javascript.ru/forum/events/59625-prisvoit-svojjstvo-obekta-drugomu-bez-eval.html)

iwtn 19.11.2015 21:25

Присвоить свойство объекта другому без eval
 
Привет.

Есть объект. К примеру:
var obj={ student: "Vasya";
age: 19
some_prop: [1,2,3]
some_prop2: {}
}

и пустой:
var obj2={};

Как можно объекту obj2 присвоить конкретное свойство из obj1 программно(т.е. я названия свойств заранее не знаю). Но НЕ через Eval и не копированием объекта целиком, а потом удалением не нужного. Есть какой-то другой способ?

Результат должен быть к примеру такой:
var obj2={
age: 19
some_prop: [1,2,3]
};

рони 19.11.2015 21:43

Цитата:

Сообщение от iwtn
Как можно объекту obj2 присвоить конкретное свойство из obj1 программно(т.е. я названия свойств заранее не знаю).

а в каком виде вы эти названия получаите?

iwtn 19.11.2015 22:04

Цитата:

Сообщение от рони (Сообщение 396805)
а в каком виде вы эти названия получаите?

В виде входящего json объекта.

Mess4me 19.11.2015 22:07

iwtn,
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<script>

    var obj = {
        student: "Vasya",
        age: 19,
        some_prop: [1, 2, 3],
        some_prop2: {}
    };


    var obj2 = {

    };

    function fromObjToObj2(objFrom, objTo){
        for(var i = 2;i<arguments.length;i++){

            for(var key in objFrom){

                if(key == arguments[i]){

                    objTo[key] = objFrom[key]
                }
            }
        }
    }

    fromObjToObj2(obj, obj2,'age','student');

    alert(JSON.stringify(obj2))

</script>
</body>
</html>

iwtn 19.11.2015 22:14

Я же говорю я не знаю свойств объекта
и вот так fromObjToObj2(obj, obj2,'age','student'); не могу сделать.
Т.е. для меня входящий объект obj как чёрный ящик. Я могу его свойства просмотреть но названий их у меня нет. Такова задача.
Есть другие способы кроме eval в этом случае или нет?

рони 19.11.2015 22:35

iwtn,
напишите как вы делаите с помощью eval ?

iwtn 22.11.2015 10:21

objTo[key] = objFrom[key]
Да, вот так. В этом случае название нового свойства будет таким, что хранит переменная key. Чё то я немного не врубился сначала.
Думал что новое свойство можно назначить только через точку вот так: objTo.key=objFrom[key]; но в этом случае создастся новое свой-во с ключом "key" а не с тем что хранит переменная key.

Короче вот эти 2 варианта:
objTo.key=objFrom[key]
objTo[key]=objFrom[key]
работают принципиально по-разному.

Всё, вопрос закрыт. Спасибо Mess4me.


Часовой пояс GMT +3, время: 19:56.