在ES6中过滤对象以形成另一个对象

时间:2018-08-14 20:06:37

标签: javascript arrays ecmascript-6 javascript-objects

我有一个如下所示的对象数组,试图仅映射某些键及其值以形成另一个数组对象。

下面是我对单个对象的尝试

const object1 = { app_id:35687,codesmell: 30, baz: 42 };
console.log(Object.entries(object1).map(x => {app_id:x.app_id}));

我总是不确定,一直在搜索mdn和stackoverflow无法找到解决方案。请帮忙。

我尝试的另一种尝试,这次是使用result是对象数组的数组

T_BugDetails: result.data.map(x => Object.entries(x).reduce((a,b) => { a, b},{}))

1 个答案:

答案 0 :(得分:7)

一些问题:

  • Object.entries返回一个 arrays 数组(对象的键和值的数组)。如果您.map是对象的entries,则.map的第一个参数应为键和值的数组,如下所示:

    Object.entries(object1).map(([key, val]) => ...
    
  • 要从箭头函数返回对象,请将对象的括号({})括在括号中,否则将被解释为普通的功能块内含label,而不是隐式返回的对象:

    => {app_id:x.app_id}
    

    => ({app_id:x.app_id})
  • 但是,如果您只想由原始对象的app_id组成的对象,则不要迭代原始对象的entries,因为您只需要一个属性,而不是其所有属性属性-相反,只需提取原始对象的app_id

const object1 = { app_id:35687,codesmell: 30, baz: 42 };
const { app_id } = object1;
console.log(
  { app_id }
);

仅当您具有需要转换的对象的数组时,才使用.map,例如:

const objects = [
  { app_id:35687,codesmell: 30, baz: 42 },
  { app_id:12345,codesmell: 20, baz: 52 }
];
console.log(
  objects.map(({ app_id }) => ({ app_id }))
);