【问题标题】:Filter Object in ES6 to form another Object在 ES6 中过滤对象以形成另一个对象
【发布时间】:2019-01-21 18:14:00
【问题描述】:

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

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

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},{}))

【问题讨论】:

  • 你忘了return
  • 你没有返回任何东西。你可能认为你是,但{} 表示函数的主体,而不是返回的对象。你可以这样做; () => ({ name: value }); 或者这个; () => { return {name: value}; }

标签: javascript arrays ecmascript-6 javascript-objects


【解决方案1】:

一些问题:

  • 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 }))
);

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2022-09-27
    • 1970-01-01
    • 2021-10-30
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2019-05-05
    相关资源
    最近更新 更多