1

我想根据另一个对象中的值过滤一组对象。我正在尝试map()数组和filter()函数内部,以便我能够获得一个仅包含所需(活动)字段的新数组。

我正在尝试在 上获取过滤器Object.entries(),我尝试比较键并检查活动过滤器的值是否为true,但我没有做对。

const records = [
    {
    id: 1,
    name: "first",
    date: "05/02"
  },
  {
    id: 2,
    name: "second",
    date: "06/02"
  },
  {
    id: 3,
    name: "third",
    date: "07/02"
  },
  {
    id: 4,
    name: "fourth",
    date: "08/02"
  }
];

const active = {
  id: true,
  name: false,
  date: true
};

const result = records.map((record) => {
  return Object.entries(record).filter((entry) => {
    Object.entries(active).forEach((activeEntry) => {
      return activeEntry[1] && activeEntry[0] === entry[0];
    });
  });
});

console.log(result);

这是期望的结果

const desiredOutcome = [
  {
    id: 1,
    date: "05/02"
  },
  {
    id: 2,
    date: "06/02"
  },
  {
    id: 3,
    date: "07/02"
  },
  {
    id: 4,
    date: "08/02"
  }
];
4

2 回答 2

1

只需通过现有的键过滤键,然后使用Object.fromEntries返回到一个对象

const records = [
    {
    id: 1,
    name: "first",
    date: "05/02"
  },
  {
    id: 2,
    name: "second",
    date: "06/02"
  },
  {
    id: 3,
    name: "third",
    date: "07/02"
  },
  {
    id: 4,
    name: "fourth",
    date: "08/02"
  }
];

const active = {
  id: true,
  name: false,
  date: true
};

const result = records.map((record) => {
  return Object.fromEntries( Object.entries(record).filter(([key,value]) => active[key]));
});

console.log(result);

于 2021-05-04T15:18:52.257 回答
1

您可以过滤对象的条目并将其转换回使用Object.fromEntries.

const records=[{id:1,name:"first",date:"05/02"},{id:2,name:"second",date:"06/02"},{id:3,name:"third",date:"07/02"},{id:4,name:"fourth",date:"08/02"}];
const active = {
  id: true,
  name: false,
  date: true
};
const res = records.map(x => 
  Object.fromEntries(
    Object.entries(x).filter(([k])=>active[k])));
console.log(res);

于 2021-05-04T15:18:05.650 回答