#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. Я имею в виду не хранение объектов массива. С другой стороны, моим источником является объект, который может включать элементы объекта. Итак, как это может быть пустой тратой времени?