удалить элементы из одного объекта, которые совпадают с элементами других объектов - PullRequest
0 голосов
/ 18 июня 2020

у меня есть структура объекта, как показано ниже

"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 имеет только один, потому что номер и имя проекта совпадают с массивом project объекта allprojects. Есть ли способ достичь таких результатов в react js. Любые предложения или идеи были бы мне очень благодарны, заранее большое спасибо

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вы можете просто объединить .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);
     })
 );
1 голос
/ 18 июня 2020

Вы можете комбинировать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...