【问题标题】:use filter of Lodash/Javascript to get the filtered data使用 Lodash/Javascript 的过滤器获取过滤后的数据
【发布时间】:2020-09-15 08:42:02
【问题描述】:

我有两个对象数组。

const firstObj = [
  { Id: "1", Name: "Peter" },
  { Id: "2", Name: "John" },
  { Id: "12", Name: "jessy" },
];

const secondObj = [
  { Id: "1", Name: "Roa", original: { Id: "1" } },
  { Id: "2", Name: "John2", original: { Id: "2" } },
  { Id: "5", Name: "Rachel", original: { Id: "3" } },
];

这里,我尝试根据Id过滤数据,返回过滤后的firstObj

所以,这里 firstObj 有一个条目 { Id: "12", Name: "jessy" } 这个对象的 Id 与 secondObj.original.Id 不匹配所以,firstObj 将得到给定的结果。

我尝试的是

firstObj.filter(
  firstObj,
  secondObj.map((second) => {
    return firstObj.Id === second.original.Id;
  }),
);

但这不起作用。任何人都可以在这里帮助我,使用 Lodash 或 Js 过滤器。

output would be -> [{"Id": "3", "Name": "jessy"}]

【问题讨论】:

  • 您能否举例说明这些输入的输出应该是什么?
  • Array.prototype.filter() 不是这样工作的
  • @cbr 我已经更新了问题请检查
  • 为什么是预期的输出?为什么是 "jessy" 而不是不同的对象?
  • @Andreas 我的错,我刚刚更新了问题,请检查

标签: javascript reactjs lodash


【解决方案1】:

这是你要找的吗?

const firstObj = [
  { Id: "1", Name: "Peter" },
  { Id: "2", Name: "John" },
  { Id: "12", Name: "jessy" },
];

const secondObj = [
  { Id: "1", Name: "Roa", original: { Id: "1" } },
  { Id: "2", Name: "John2", original: { Id: "2" } },
  { Id: "1", Name: "Rachel", original: { Id: "3" } },
];


const result = lodash.filter(firstObj, (firstItem) => {
  return !lodash.some(secondObj, (secondItem) => {
    return firstItem.Id === secondItem.original.Id;
  });
});

直播:https://stackblitz.com/edit/js-addy5t?file=index.js

【讨论】:

    【解决方案2】:

    为什么要为此使用 loadash。你可以使用原生过滤器和查找函数来实现这一点

    const filter = firstObj.filter(item => {
         return secondObj.find(itm => itm.original.id === item.id)
    });
    

    【讨论】:

      【解决方案3】:

      您可以使用Array.filter()Array.some() 的本机方法来实现所需的输出。

      请检查下面的工作代码sn-p

      ES6

      const firstObj = [
        { Id: "1", Name: "Peter" },
        { Id: "2", Name: "John" },
        { Id: "12", Name: "jessy" },
      ],
      secondObj = [
        { Id: "1", Name: "Roa", original: { Id: "1" } },
        { Id: "2", Name: "John2", original: { Id: "2" } },
        { Id: "1", Name: "Rachel", original: { Id: "3" } },
      ];
      
      let result = firstObj.filter(({Id})=> !secondObj.some(item => item.original.Id === Id));
      
      console.log(result)

      【讨论】:

        猜你喜欢
        • 2020-05-04
        • 2021-09-30
        • 2017-09-01
        • 2019-10-09
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多