Почему Array helper Filter возвращает нулевое значение - PullRequest
0 голосов
/ 09 сентября 2018

Я новичок в JavaScript и, изучая его, пытаюсь отфильтровать сотрудника по образованию, но мой фильтр возвращает нулевое значение. Может кто-нибудь помочь мне понять, почему это так?

var employeeEdu = [{education: 'Masters'}];
 
var employees = [{id: 1, age: 35, name: 'James', dept: 'IT', education: 'Masters'},
                {id: 2, age: 25, name: 'David', dept: 'Accounts', education: 'High School'},
                {id: 3, age: 45,name: 'Tim', dept: 'HR', education: 'Graduate'}, 
                {id: 4, age: 50,name: 'Vinod', dept: 'IT', education: 'PHD'}];

function chooseQualified(arrEmployee, empEducation) {
  return arrEmployee.filter(function(emp) {
    return emp.education === empEducation.education;
    //  return emp.education === 'Masters';
  });
}

console.log(chooseQualified(employees, employeeEdu));

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Как говорит @Ori Drori, employeeEdu - это массив, поэтому empEducation.education не определен, но empEducation [0] .education имеет значение «Masters». Я предлагаю, чтобы employeeEdu был объектом вместо массива, как показано ниже. var employeeEdu = {education: 'Masters'};

var employeeEdu = {education: 'Masters'};
 
var employees = [{id: 1, age: 35, name: 'James', dept: 'IT', education: 'Masters'},
                {id: 2, age: 25, name: 'David', dept: 'Accounts', education: 'High School'},
                {id: 3, age: 45,name: 'Tim', dept: 'HR', education: 'Graduate'}, 
                {id: 4, age: 50,name: 'Vinod', dept: 'IT', education: 'PHD'}];

function chooseQualified(arrEmployee, empEducation) {
  return arrEmployee.filter(function(emp) {
    return emp.education === empEducation.education;
    //  return emp.education === 'Masters';
  });
}

console.log(chooseQualified(employees, employeeEdu));
0 голосов
/ 09 сентября 2018
/* @Params: 
 * array0 [Array of Objects]: Array to search through.
 * array1 [Array of Objects]: Array with the key/value to search for.
 * key [String]: Key of the object in array1.
 * index [Number](optional): Index of array1. default: 0.    
 */
 // Returns a new array of objects witch matched by key/value from the two given arrays.
function findByKV(array0, array1, key, index = 0) {

// Get the value of the key to be searched for
var value = array1[index][key];

// Filter the array to be searched obj is each Object in array1

filter()

array0.filter(function(obj) {

// Get each obj key of array0 and ...

Object.keys() .some()

return Object.keys(obj).some(function(key) {

// ...return true if at least one String value matches the value of the key in array1

.toString() .indexOf()

 return obj[key].toString().indexOf(value) != -1;

var target0 = [{education: 'Masters'}];

var target1 = [{dept: 'IT',education: ''}];

var employees = [
  {id: 1,age: 35,name: 'James',dept: 'IT',education: 'Masters'}, 
  {id: 2,age: 25,name: 'David',dept: 'Accounts',education: 'High School'}, 
  {id: 3,age: 45,name: 'Tim',dept: 'HR',education: 'Graduate'}, 
  {id: 4,age: 50,name: 'Vinod',dept: 'IT',education: 'PHD'}, 
  {id: 5,age: 46,name: 'Matt',dept: 'IT',education: 'Masters'}
];

function findByKV(array0, array1, key, index = 0) {
  var value = array1[index][key];
  var array2 = array0.filter(function(obj) {
    return Object.keys(obj).some(function(key) {
      return obj[key].toString().indexOf(value) != -1;
    });
  });
  return array2;
}

var result0 = findByKV(employees, target0, 'education');
var result1 = findByKV(employees, target1, 'dept');

console.log('Found targrt0: ' + JSON.stringify(result0, null, 2));
console.log('Found target1: ' + JSON.stringify(result1, null, 2));
0 голосов
/ 09 сентября 2018

Это потому, что employeeEdu является массивом, а employeeEdu.education не определено. Что вам нужно сделать, это оформить заказ employeeEdu[0].education:

var employeeEdu = [{education: 'Masters'}];
 
var employees = [{"id":1,"age":35,"name":"James","dept":"IT","education":"Masters"},{"id":2,"age":25,"name":"David","dept":"Accounts","education":"High School"},{"id":3,"age":45,"name":"Tim","dept":"HR","education":"Graduate"},{"id":4,"age":50,"name":"Vinod","dept":"IT","education":"PHD"}];

function chooseQualified(arrEmployee, empEducation) {
  return arrEmployee.filter(function(emp) {
    return emp.education === empEducation[0].education;
    //  return emp.education === 'Masters';
  });
}

console.log(chooseQualified(employees, employeeEdu));

Другое решение состоит в том, чтобы удалить упаковочный массив:

employeeEdu = {education: 'Masters'};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...