Свойство объектов JavaScript для массива - PullRequest
0 голосов
/ 10 января 2019

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

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 правильно, но мой вопрос, если я пропускаю метод для решения этой проблемы.

Ответы [ 5 ]

0 голосов
/ 10 января 2019

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

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

0 голосов
/ 10 января 2019

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

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);
0 голосов
/ 10 января 2019

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);
0 голосов
/ 10 января 2019

Я думаю, здесь не было необходимости использовать 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 голосов
/ 10 января 2019

Вы можете использовать свойство 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);
...