[英]JavaScript objects property to array
我有以下对象:
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',
},
};
然后我想要一个仅具有属性ID的数组。 为此,我尝试了以下方法:
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
返回的Array中的第一个属性。 对于当前编写的函数,这确实是正确的,但是我不确定在一般情况下您是否一定可以保证这一点。 即使属性的顺序不同,直接引用movie.id
可以。 它也应该更快一些,因为您不必每次都将eaxh单个对象转换为Array。
我认为这里不需要在map
部分中使用Object.values
。 没有它会是一样的:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.