У меня есть следующий объект:
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
должным образом, но мой вопрос, если я пропустил метод для решения этой проблемы.
Вы можете использовать свойство 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);
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);
В этом случае я был бы более склонен использовать movie => movie.id
качестве функции отображения, а не movie => Object.values(movie)[0]
.
Проблема с вашей текущей функцией заключается в том, что она предполагает, что id
всегда будет первым свойством в массиве, возвращаемом Object.values
. Это происходит с вашей текущей функцией, как написано, но я не уверен, что вы можете гарантировать это в общем случае. movie.id
ссылка на movie.id
работает, даже если свойства располагаются в другом порядке. Это также должно быть немного быстрее, поскольку вам не нужно каждый раз конвертировать каждый отдельный объект в массив.
Я думаю, что здесь не было необходимости использовать 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);
Может быть, вы можете пойти с более основной версией. В моем решении цикл будет запущен только один раз.
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);
Object.values(movies).map(movie => movie.id)