Свойство объектов JavaScript для массива

1

У меня есть следующий объект:

const movies = {
  1: {
    id: 1,
    name: 'Planet Earth',
  },
  2: {
    id: 2,
    name: 'Selma',
  },
  3: {
    id: 3,
    name: 'Million Dollar Baby',
  },
  4: {
    id: 4,
    name: 'Forrest Gump',
  },
  5: {
    id: 5,
    name: 'Get Out',
  },
};

Тогда я хочу массив только с идентификатором свойства. Для этого я попробовал что-то вроде:

const moviesArray = Object.values(movies);
const idArray = moviesArray.map(movie => Object.values(movie)[0]);
console.log(idArray);

Он печатает idArray должным образом, но мой вопрос, если я пропустил метод для решения этой проблемы.

  • 3
    Object.keys (видео)
  • 1
    Object.values(movies).map(movie => movie.id)
Показать ещё 1 комментарий
Теги:
arrays
javascript-objects

5 ответов

4

Вы можете использовать свойство id напрямую:

const
    movies = { 1: { id: 1, name: 'Planet Earth' }, 2: { id: 2, name: 'Selma' }, 3: { id: 3, name: 'Million Dollar Baby' }, 4: { id: 4, name: 'Forrest Gump' }, 5: { id: 5, name: 'Get Out' } },
    moviesArray = Object.values(movies),
    idArray = moviesArray.map(movie => movie.id);

console.log(idArray);
  • 0
    Да, я забыл, что могу просто получить доступ к 'movie.id', но есть ли способ сделать это напрямую вместо значений и карты?
  • 0
    @Jquino, на самом деле вам нужны два шага для доступа к неизвестным свойствам в массиве и сопоставления для свойства.
1

const movies = {
  1: {
    id: 1,
    name: 'Planet Earth',
  },
  2: {
    id: 2,
    name: 'Selma',
  },
  3: {
    id: 3,
    name: 'Million Dollar Baby',
  },
  4: {
    id: 4,
    name: 'Forrest Gump',
  },
  5: {
    id: 5,
    name: 'Get Out',
  },
};

const moviesArray = Object.values(movies);
const idArray = moviesArray.map(movie => movie.id);
console.log(idArray);
1

В этом случае я был бы более склонен использовать movie => movie.id качестве функции отображения, а не movie => Object.values(movie)[0].

Проблема с вашей текущей функцией заключается в том, что она предполагает, что id всегда будет первым свойством в массиве, возвращаемом Object.values. Это происходит с вашей текущей функцией, как написано, но я не уверен, что вы можете гарантировать это в общем случае. movie.id ссылка на movie.id работает, даже если свойства располагаются в другом порядке. Это также должно быть немного быстрее, поскольку вам не нужно каждый раз конвертировать каждый отдельный объект в массив.

0

Я думаю, что здесь не было необходимости использовать Object.values в части map. Было бы так же без него

const movies = {
  1: {
    id: 1,
    name: 'Planet Earth',
  },
  2: {
    id: 2,
    name: 'Selma',
  },
  3: {
    id: 3,
    name: 'Million Dollar Baby',
  },
  4: {
    id: 4,
    name: 'Forrest Gump',
  },
  5: {
    id: 5,
    name: 'Get Out',
  },
};
const moviesArray = Object.values(movies);
    const idArray = moviesArray.map(movie => movie);
    console.log(moviesArray);
0

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

const movies = {
  1: {
    id: 1,
    name: 'Planet Earth',
  },
  2: {
    id: 2,
    name: 'Selma',
  },
  3: {
    id: 3,
    name: 'Million Dollar Baby',
  },
  4: {
    id: 4,
    name: 'Forrest Gump',
  },
  5: {
    id: 5,
    name: 'Get Out',
  },
};


const idArray = [];
for (let i in movies) {
	idArray.push(movies[i].id);
}

console.log(idArray);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню