Как выполнить итерацию с двумя массивами внутри массива с помощью метода filter () - PullRequest
0 голосов
/ 19 ноября 2018

Как я могу получить его, чтобы войти в блок .map ()?Можно ли это сделать или мне нужно подойти к этой проблеме по-другому?

var orderCompetences = [];
var nActiveApplicants = [];
function MatchCompetences() {
 var _applicantCompetenceResults = nActiveApplicants.filter(xApplicant => {
   xApplicant.applicantCompetences.map(applComp =>
   orderCompetence.map(orderComp => {
     console.log(applComp ); //never gets called
     console.log(orderComp);//never gets called
     return applComp === orderComp;
  }));
});

 return Promise.all(_applicantCompetenceResults)
 .then(resp => {
   console.log(resp); // Never gets called
   return 1;
 })
 .catch(err => {
   console.log(err);
   return 0;
 });
}

Объект внутри nActiveApplicants

nApplicant = {
  applicantID: "",
  applicantPeriods: [],
  applicantCompetences: [],
  applicantFullAddress: "",
  applicantDuration: ""
};

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я предположил, что вы хотите, чтобы некоторые из applicantCompetences существовали в orderCompetences, используя метод find для поиска действительного результата, а затем отфильтровали его.Я сопоставил оставшиеся записи с Обещаниями.

function MatchCompetences() {

  var nActiveApplicants = [{
      applicantID: "abcd",
      applicantPeriods: [],
      applicantCompetences: ['can read', 'can talk', 'useless mostly'],
      applicantFullAddress: "",
      applicantDuration: ""
    },
    {
      applicantID: "efgh",
      applicantPeriods: [],
      applicantCompetences: ['can read', 'can talk', 'singer mostly', 'it-will-do'],
      applicantFullAddress: "",
      applicantDuration: ""
    }
  ];

  var orderCompetence = ['it-will-do'];

  var _applicantCompetenceResults = nActiveApplicants.filter(xApplicant => {

    return typeof xApplicant.applicantCompetences.find(elem => {
      return orderCompetence.indexOf(elem) !== -1;
    }) !== 'undefined'

  }).map(item => {

    return new Promise(resolve => {
      resolve(item);
    })

  });

  return Promise.all(_applicantCompetenceResults)
    .then(resp => {
      console.log('remaining applicants', resp); // Never gets called
      return 1;
    })
    .catch(err => {
      console.log(err);
      return 0;
    });
}

MatchCompetences()
0 голосов
/ 19 ноября 2018

Я подозреваю, что вы хотите что-то подобное, хотя мне не ясно, почему вы обернули бы это в Promise.all, так как я почти уверен, что _applicantCompetenceResults не будет массивом Обещаний:

var orderCompetences = [];
var nActiveApplicants = [];
function MatchCompetences() {
  var _applicantCompetenceResults = nActiveApplicants.filter(xApplicant => 
    xApplicant.applicantCompetences.some(applComp => orderCompetences.includes(applComp))
  );

  return Promise.all(_applicantCompetenceResults)
    .then(resp => {
      console.log(resp);
      return 1;
    })
    .catch(err => {
      console.log(err);
      return 0;
    });
}

Если это не поможет вам, вы можете попытаться объяснить, чего вы надеетесь достичь, а не вдаваться в подробности кода, с которым вы работаете.

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