Фильтр по значению вложенного массива объектов в Typescript - PullRequest
0 голосов
/ 06 апреля 2019

Мои данные json имеют следующую структуру:

[
{"domain":"d1",
"technology":"Java",
"artifacts[{ 
  "artifactName":"app1",
  "hasVersionDiff":true,
  "environment":["DEV","SQA"],
  "version":["Not Available","1.0-R1"]
}]},

{"domain":"d2",
"technology":".net",
"artifacts[{ 
  "artifactName":"app4",
  "hasVersionDiff":false,
  "environment":["DEV","SQA"],
  "version":["1.0-R1","1.0-R1"]}]
}]

Этот результат является переменной CompareResults.Сейчас я пытаюсь отфильтровать это на основе данных артефактов (флаг hasVersionDiff true) каждой записи.Я пытаюсь фильтровать, используя ниже:

this.compareResults.map(function(ComparisonResult) {
        ComparisonResult.artifacts = ComparisonResult.artifacts.filter(x => x.hasVersionDiff == true)
    });

Но это не фильтрация, кто-то может объяснить, почему это не работает?

1 Ответ

1 голос
/ 06 апреля 2019

Потому что с map вам нужно return новый предмет.(Я также исправил структуру вашего объекта, чтобы сделать ее действительной):

const compareResults = [{
    "domain": "d1",
    "technology": "Java",
    "artifacts": [{
      "artifactName": "app1",
      "hasVersionDiff": true,
      "environment": ["DEV", "SQA"],
      "version": ["Not Available", "1.0-R1"]
    }]
  },

  {
    "domain": "d2",
    "technology": ".net",
    "artifacts": [{
      "artifactName": "app4",
      "hasVersionDiff": false,
      "environment": ["DEV", "SQA"],
      "version": ["1.0-R1", "1.0-R1"]
    }]
  }
];

const modified = compareResults.map(function(ComparisonResult) {
  ComparisonResult.artifacts = ComparisonResult.artifacts.filter(x => x.hasVersionDiff);
  return ComparisonResult;
});

console.log(modified);
.as-console-wrapper { max-height: 100% !important; top: auto; }

Если вы хотите удалить весь объект, если artifacts пусто:

const compareResults = [{
    "domain": "d1",
    "technology": "Java",
    "artifacts": [{
      "artifactName": "app1",
      "hasVersionDiff": true,
      "environment": ["DEV", "SQA"],
      "version": ["Not Available", "1.0-R1"]
    }]
  },

  {
    "domain": "d2",
    "technology": ".net",
    "artifacts": [{
      "artifactName": "app4",
      "hasVersionDiff": false,
      "environment": ["DEV", "SQA"],
      "version": ["1.0-R1", "1.0-R1"]
    }]
  }
];

const modified = compareResults.map(function(ComparisonResult) {
  ComparisonResult.artifacts = ComparisonResult.artifacts.filter(x => x.hasVersionDiff);
  return ComparisonResult;
}).filter(({ artifacts }) => artifacts.length);

console.log(modified);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...