【问题标题】:remove items from one object those are matched with other object items从一个对象中删除与其他对象项匹配的项
【发布时间】:2020-10-07 21:05:31
【问题描述】:

我有一个对象结构如下所示

"designProjects": [
  {
    "projectNumber": "number1",
    "name": "test1"
  },
  {
    "projectNumber": "number2",
    "name": "test2"
  },
  {
    "projectNumber": "number3",
    "name": "test3"
  },
]

我有另一个具有如下结构的对象

"allProjects": [
  {
    "project": {
      "name": "test1",
      "number": "number1"
    },
    "employee": {
      "displayName": "name1"
    },
    "projectRoleName": "Editor"
  },
  {
    "project": {
      "name": "test2",
      "number": "number2"
    },
    "employee": {
      "displayName": "name2"
    },
    "projectRoleName": "Editor"
  },
]

我看起来像下面这样的结果

"designProjects": [
  {
    "projectNumber": "number3",
    "name": "test3"
  },
]

这里的结果是 designProjects 只有一个,因为项目编号和名称与 allprojects 对象的 project 数组匹配。有没有办法我们可以在react js 中实现这个结果。 任何建议或想法都会非常感谢我,非常感谢提前

【问题讨论】:

  • 那么,您要获取项目编号 3(差异)还是项目编号 1 和 2(交叉点)?

标签: javascript arrays reactjs object ecmascript-6


【解决方案1】:

您只需将.filter 与.some 结合起来,类似于:

let d = {
  "designProjects": [
    {
      "projectNumber": "number1",
      "name": "test1"
    },
    {
      "projectNumber": "number2",
      "name": "test2"
    },
    {
      "projectNumber": "number3",
      "name": "test3"
    },
  ]
}

let a = {
  "allProjects": [
    {
      "project": {
        "name": "test1",
        "number": "number1"
      },
      "employee": {
        "displayName": "name1"
      },
      "projectRoleName": "Editor"
    },
    {
      "project": {
        "name": "test2",
        "number": "number2"
      },
      "employee": {
        "displayName": "name2"
      },
      "projectRoleName": "Editor"
    },
  ]
};

console.log(
    d.designProjects.filter((designProject) => {
        return !a.allProjects.some((project) => designProject.projectNumber === project.project.number && designProject.name === project.project.name);
     })
 );

【讨论】:

  • 对不起,我无法与这两者结合,如果不结合它们是否有可能..
  • 你不能结合哪两个? .filter 和 .some?
  • 像这样let Obj = {}我无法合并..
  • 您不必将它们组合起来,只需将obj.designProjects 替换为它真正的任何对象,并将obj.allProjects 替换为它真正的任何对象。它们是否在同一个物体上并不重要。
【解决方案2】:

你可以结合filter和some

filter 用于根据条件返回一个新的过滤数组

some 将作为条件并在找到匹配项后立即返回

const designProjects = [{
    "projectNumber": "number1",
    "name": "test1"
  },
  {
    "projectNumber": "number2",
    "name": "test2"
  },
  {
    "projectNumber": "number3",
    "name": "test3"
  },
];

const allProjects = [{
    "project": {
      "name": "test1",
      "number": "number1"
    },
    "employee": {
      "displayName": "name1"
    },
    "projectRoleName": "Editor"
  },
  {
    "project": {
      "name": "test2",
      "number": "number2"
    },
    "employee": {
      "displayName": "name2"
    },
    "projectRoleName": "Editor"
  },
]

const cleaned = designProjects.filter((x) => {
  return !allProjects.some(y => y.project.number === x.projectNumber);
});

console.info(cleaned);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多