繁体   English   中英

将JavaScript对象属性设置为数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM