2016-09-30 3 views
-1

Я довольно новичок в разработке, поэтому вам нужна помощь с объектом. Я попытался сделать цикл for и нажав значения в массив. Проблема состоит в том, что он нажимает все ключи/значения как один индекс, а не индексирует каждую клавишу/значение отдельно. Я работаю с объектом ключ/значение следующим образом:Как изменить вложенный объект Javascript в объект на индексированный массив?

var obj = { 
    "application": { 
     "create": "false", 
     "read": "true", 
     "update": "true", 
     "delete": "false" 
    }, 
    "connection": { 
     "create": "false", 
     "read": "true", 
     "update": "true", 
     "delete": "false" 
    } 
} 

мне нужно каждый ключ (приложений и подключение) индексируемые - ключи должны быть значения. Например, будет получено следующее:

obj[0] = application 
    obj[0].create = false 
    obj[1] = connection 

Благодарим за помощь.

+0

пожалуйста, добавьте хотел (действительный) результат. –

+0

Почему, по-вашему, вам это нужно? Какую проблему вы пытаетесь решить с этим? –

ответ

1

Вы можете добавить дополнительное поле key для хранения ключей объекта obj. Это создает array объектов.

var obj = { 
 
    "application": { 
 
    "create": "false", 
 
    "read": "true", 
 
    "update": "true", 
 
    "delete": "false" 
 
    }, 
 
    "connection": { 
 
    "create": "false", 
 
    "read": "true", 
 
    "update": "true", 
 
    "delete": "false" 
 
    } 
 
} 
 

 
var keys = Object.keys(obj) 
 
var arr = [] 
 
keys.map(function(key, i) { 
 
    arr[i] = obj[key] 
 
    arr[i].key = key 
 
}) 
 

 
console.log(arr[0].key) 
 
console.log(arr[0].create) 
 
console.log(arr[1].key)

+0

Спасибо, Пранеш. Как я могу достичь этого с помощью объекта - он не должен быть массивом. Я просто предположил, что это должен быть массив. – Heather

+0

@Heather Обновлен ответ. Проверьте! –

+0

Удивительный! Большое спасибо - это сработало! – Heather

0

Если вы хотите, каждое свойство объекта толкания в массив, вы можете перебрать содержимое объекта следующим образом:

for (var item in obj){ 
    /* item will equal the first property of obj, in this case: 'application' */ 
    array.push(item) 
} 

array = ["application", "connection"] 

Вы можете использовать ту же технику, на каждом свойстве объекта, индексировать их ребенок в массив.

+0

Спасибо, Андрей. Я попробую это. Можете ли вы предоставить способ, как я могу добавить детей? Я использовал Object.getOwnPropertyNames для ввода ключей в массив, но мне нужно также вставить вложенный объект. – Heather

+0

Добро пожаловать, могу я спросить, каков ваш желаемый результат? Вы упомянули в другом комментарии, что, по вашему мнению, результат должен быть массивом. Если мы знаем, каков ваш желаемый результат, мы можем более точно дать более точное решение. –

+0

Я пытаюсь заполнить сетку этими данными. Заголовками таблицы являются Model, создаются, читаются, обновляются, удаляются. Столбец модели должен заполняться приложением и соединением. Соответствующие значения для создания, чтения, обновления и удаления должны быть заполнены для каждой модели. – Heather

0

По результата вы ожидаете, это выглядит, как вы хотите, чтобы превратить первый уровень вашего объекта в ячейках массива.

Это будет делать это:

var arr = [], i=0; 
for (var key in obj) { 
    arr[key] = obj[key] // For accessing via the property name for example e.g. application 
    arr[i] = obj[key] // For index access for example obj[0] 
    i++; 
} 

Вы также можете использовать метод .map, чтобы сделать это.

+0

Откуда берется «я»? Почему вы создаете массив вместо того, чтобы просто расширять 'obj' цифровыми клавишами? –

+0

Вы правы, я забыл его установить, я обновил пример. – fistuks

0

Вы можете перебирать ключи и создавать новый массив с дочерними элементами внутреннего объекта.

var obj = { application: { create: "false", read: "true", update: "true", delete: "false" }, connection: { create: "false", read: "true", update: "true", delete: "false" } }, 
 
    array = Object.keys(obj).map(function (k) { 
 
     return [k].concat(Object.keys(obj[k]).map(function (kk) { 
 
      return obj[k][kk]; 
 
     })); 
 
    }); 
 

 
console.log(array);

+0

Спасибо Нине.Эти индексы - однако мне все еще нужно сохранить ключи (приложение и соединение). Журнал консоли печатает [0] объект. – Heather

+0

, пожалуйста, добавьте желаемый полный результат в ваш вопрос. как написано, это недопустимый javascript. –

Смежные вопросы