Сделать объект объектов одним объектом javascript

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

У меня есть объект, и некоторые из его элементов тоже являются объектами. Как я могу сделать мою переменную только одним объектом?

Я имею в виду, что у меня есть переменная, которая имеет элементы:

  • Имя
  • Тип

тип — это объект, который имеет поле:

  • Имя

Итак, я один, что:

  • Имя
  • type.name (не как объект, а просто как другая переменная, подобная имени)

PS: Когда я проверяю свою переменную с помощью Firebug:

 name
    "fsfaf"

password
    "242342425"

name
    "XXX"

type
    Object { name="sds"}

name
    "sfs"
  

Давайте предположим, что я храню его с помощью переменной myVariable . Я хочу сделать что-то подобное:

 var newVariable = somefunction(myVariable);
  

итак, моя новая переменная должна быть такой:

 name
    "fsfaf"

password
    "242342425"

name
    "XXX"

type.name
    "sds"

name
    "sfs"
  

Комментарии:

1. Почему вы хотите это сделать? Кстати, если у вас есть type.name тип, это все еще объект!

2. Я хочу новый элемент вместо типа, type.name . type.name не является объектом (я протестировал с помощью Firebug то, что я хочу сделать, type.name не кажется объектом)

Ответ №1:

Я тоже отредактировал свой ответ. Вот способ сделать то, что вы хотите:

 var myVar = 
{
    name: 'myName', 
    type: { name: 'type.name' }
}

function varToNewVar(myVar)
{
    var newVar = {};

    for(var i in myVar)
    {
        if(typeof myVar[i] === 'object')
        {
            for(var j in myVar[i])
            {
                newVar[i '.' j] = myVar[i][j];
            }
        }
        else
            newVar[i] = myVar[i];
    }

    return newVar;
}

var newVar = varToNewVar(myVar);
  

Однако таким образом вы не сможете получить доступ newVar.type.name , вы можете получить доступ к newVar[‘type.name ‘], что, я думаю, вполне подходит для того, чего вы хотите достичь…

PS Тщательно протестируйте перед применением к живым проектам и т. Д. Я полагаю, что многое может пойти не так, в зависимости от объектов, которые вы используете. Не должно быть никаких проблем с его использованием в нужной вам ситуации

Комментарии:

1. Применение к живым проектам? Если у kamaci есть проект, который требует таких трюков, то этот проект никогда не следует развертывать. 🙂 Этот код плохой. Я имею в виду не с точки зрения кодирования, а с точки зрения проектирования.

2. @Nikoloff голосую за вашу помощь, вот чего я хочу. Я не хочу использовать newVar.type.name — все в порядке. Еще одна вещь. Как я могу сделать это внутри того же объекта, который я имею в виду, без использования newVar, только с myVar?

3. Вы можете просто использовать этот метод для той же переменной, например: myVar = varToNewVar(myVar); . Это также можно переместить как метод внутри объекта, заменив параметр на this . Не могу привести вам пример прямо сейчас, нужно идти… Кроме того, посмотрите, что сказал @freakish 🙂

4. @freakish Я разрабатываю проект Spring REST. У меня есть объект, в котором есть элементы типа списка. Джексон преобразует его в JSON, который может иметь элементы типа массива JSON. Я буду использовать его в сетке, jqGrid, которая хочет получить массив по моей логике. Вот почему я пытаюсь это сделать.

Ответ №2:

 var o = {
  "name": "my_name",
  "type.name": "type's name"
}
  

Серьезно, хотя, что? Чего вы на самом деле хотите?

 function IAmAUselessHack(o) {
  o["type.name"] = o.type.name;
}
  

Комментарии:

1. У меня уже есть объект, в котором есть элементы типа объекта. Я хочу преобразовать его с помощью функции. Мой ввод всегда является объектом, который содержит некоторые объекты.

2. что вы имеете в виду под «IAmAUselessHack»?

3. Я отправлю эту переменную в плагин, который принимает только объекты с полями (не имеет членов типа объекта), поэтому я пытаюсь это сделать.

4. @kamaci Я подразумеваю, что то, что вы делаете, — пустая трата времени.

5. это не пустая трата времени. Я использую плагин, который принимает элемент только array. Я имею в виду не хранение объектов массива. С другой стороны, моим источником является объект, который может включать элементы объекта. Итак, как это может быть пустой тратой времени?