Сравнение двух массивов JSON и получение не совпадающих значений - PullRequest
0 голосов
/ 07 июня 2018

У меня есть два таких массива

$scope.eClauses = [
  {
    swift_code: "31D",
    eline_description: "e-Example 1"
  },
  {
    swift_code: "41D",
    eline_description: "e-Example 2"
  },
  {
    swift_code: "00D",
    eline_description: "e-Example 3"
  }
];


$scope.masterClauses = [
  {
    swift_code: "31D",
    eline_description: "e-Example 1"
  },
  {
    swift_code: "41D",
    eline_description: "e-Example 2"
  }
];

Я бы хотел сравнить эти массивы и получить несоответствующие значения для другого массива, подобного этому

$scope.notmatching = [
  {
    swift_code: "00D",
    eline_description: "e-Example 3"
  }
];

Пока я пыталсяс для каждого , но не сработало

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Вы можете попробовать, как в приведенном ниже коде, получить недостающую запись из основного в исходный список, как показано в приведенном ниже коде.Также, пожалуйста, проверьте эту ссылку для вашего данного рабочего примера сценария.

Контроллер:

$scope.getMissingRecord=function(){
   angular.forEach($scope.eClauses, function(item){
   var index = $scope.masterClauses.map(function(e){ return e.eline_description; }).indexOf(item.eline_description);
      if(index==-1) $scope.notmatching.push(item);
    });
};

Шаблон:

<button type="button" ng-click="getMissingRecord();">Click To Get Unmatched Clauses</button>
<ul ng-repeat="um in notmatching">
  <li>{{um.swift_code}}</li>
  <li>{{um.eline_description}}</li>
</ul>
0 голосов
/ 07 июня 2018

вы можете использовать underscore.js таким образом, это будет легко

var c = _.difference($scope.eClauses.map(e => e.swift_code), $scope.masterClauses.map(e =>e.swift_code));
var array = [];
array = $scope.eClauses.map(e => {
   if(c.includes(e.swift_code)){
     return e;
   }
}).filter(r=>r);
0 голосов
/ 07 июня 2018

Использование Array.filter

let eClauses =[{swift_code:"31D",eline_description:"e-Example1"},{swift_code:"41D",eline_description:"e-Example2"},{swift_code:"00D",eline_description:"e-Example3"}];

let masterClauses = [{swift_code:"31D",eline_description:"e-Example1"},{swift_code:"41D",eline_description:"e-Example2"}];

// Create an array of unique identifier for the objects in masterClause
let keys = Object.keys(masterClauses.reduce((a, {swift_code, eline_description}) => Object.assign(a, {[swift_code + "_" + eline_description] : undefined}), {}));

// Filter in those elements which are missing from the above array
let filtered = eClauses.filter(({swift_code, eline_description}) => !keys.includes(swift_code + "_" + eline_description))

console.log(filtered);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...