JavaScript: для каждого объекта в объекте? - PullRequest
1 голос
/ 16 апреля 2020

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

{
 object1: {
            version: 1.0.0,
            name: Name1
          },
 object2: {
            version: 1.0.0,
            name: Name2
          },
 object3: {
            version: 1.0.0,
            name: Name3
          }
}

Мне нужно создать массив с именем каждого объекта. Как il oop над этим объектом и получить имя каждого объекта?

Ответы [ 4 ]

1 голос
/ 16 апреля 2020

https://github.com/airbnb/javascript#iterators -и-генераторы

Не используйте итераторы. Предпочитайте JavaScript-функции высшего порядка вместо циклов типа for-in или for-of. eslint: нет-итератор без ограничений-синтаксис

Почему? Это усиливает наше неизменное правило. Работать с чистыми функциями, которые возвращают значения, легче, чем побочные эффекты.

Используйте ... Object.keys () / Object.values ​​() / Object.entries () для создания массивов, чтобы вы могли выполнять итерации над объектами.

Итак:

const names1 = Object.values(obj).map((sub_obj) => sub_obj.name)
const names2 = Object.keys(obj).map((key) => obj[key].name)
1 голос
/ 16 апреля 2020

с for... in l oop:

let obj = {
       object1: {
            version: "1.0.0",
            name: "Name1"
          },
       object2: {
            version: "1.0.0",
            name: "Name2"
          },
       object3: {
            version: "1.0.0",
            name: "Name3"
          }
    }

    for(let key in obj){
       name = obj[key].name;
       console.log(name);
    }
0 голосов
/ 16 апреля 2020

Я надеюсь, что это работает ...

             let obj = {
                object1: {
                            version: "1.0.0",
                            name: "Name1"
                        },
                object2: {
                            version: "1.0.0",
                            name: "Name2"
                        },
                object3: {
                            version: "1.0.0",
                            name: "Name3"
                        }
                };


            let array = Object.values(obj); //push values to new array without keys                
            let Names = []; //Empty Names array... 

            array.map(o => {
                Names.push(o.name);  //loop and push the names to new array
            });

            console.log(Names); //array of names;
0 голосов
/ 16 апреля 2020

Если вам не нужна поддержка IE, существует функциональный подход: Object.entries ()

const obj = {
 object1: {
            version: 1.0.0,
            name: Name1
          },
 object2: {
            version: 1.0.0,
            name: Name2
          },
 object3: {
            version: 1.0.0,
            name: Name3
          }
}

const names = Object.entries(obj).map(([key, value]) => value.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...