фильтр с использованием значений Dynami c в машинописи - PullRequest
0 голосов
/ 13 апреля 2020

Мое требование - отфильтровать всех Portfolio Lead, которые имеют значение English Competency, и имеют значение No.

 var data = [{
    "Employee Number": 138,
    "English Competency": "No",
    "Portfolio Lead": "x",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1385,
    "English Competency": "yes",
    "Portfolio Lead": "x",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1318,
    "English Competency": "yes",
    "Portfolio Lead": "y",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "y",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "z",
    "Maths Competency": "no"
  }
];

***************** * ОБНОВЛЕНИЕ ********************************

Ниже код работает нормально, но в employeeData это просто отображение числа вместо фактических данных. Пожалуйста, помогите

var leadsList = ['x','y','z']

function getcompetencyData(name) {

  let filteredCompetency = data.filter(item => item[name] == "No");
  console.log(filteredCompetency);

  let leadData = [];
  let employeeData = [];
  leadsList.forEach(lead => {
    filteredCompetency.forEach(competency => {
      if (lead === competency["Portfolio Lead"]) {
        leadData.push({ "Portfolio Lead": lead, "employeeData": employeeData.push(competency) })
      }
    })
  });
  console.log(leadData);
}

getcompetencyData('English Competency');

Пожалуйста, скажите мне, что я делаю здесь неправильно. Ниже приведена ссылка на стек

https://stackblitz.com/edit/typescript-n5j5y6

Ответы [ 3 ]

0 голосов
/ 13 апреля 2020

Лучше всего создать два объекта, которые вы заполняете, перебирая свои данные.

Ответ выше может дать неверные результаты, поскольку он не очищает списки x, y и z. Вместо этого попробуйте это:

const data = [
  {
    "Employee Number": 138,
    "English Competency": "No",
    "Portfolio Lead": "x",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1385,
    "English Competency": "yes",
    "Portfolio Lead": "x",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1318,
    "English Competency": "yes",
    "Portfolio Lead": "y",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "y",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "z",
    "Maths Competency": "no"
  }
];

// Create empty objects to count results in
const English = {}
const Maths = {}

// Iterate over each data entry
for (let entry of data) {
  // Load properties into convenient variable names
  id = entry["Employee Number"]
  english = entry["English Competency"]
  lead = entry["Portfolio Lead"]
  math = entry["Maths Competency"]

  // Create empty list for English and Maths objects if key not present
  if (!English[lead]) {
    English[lead] = []
  }
  if(!Maths[lead]) {
    Math[lead] = []
  }

  // Add employee to lists based on competency and lead
  if (english == "yes") {
    English[lead].push(id)
  }
  if (math == "yes") {
    Math[lead].push(id)
  }
}

// Display results for English
console.log("Project Lead: | English Competency:")
for (let [lead, emps] of Object.entries(English)) {
  console.log(lead, "       ",emps.length)
}
// Display results for Maths
console.log("Project Lead: | Maths Competency:")
for (let [lead, emps] of Object.entries(Math)) {
  console.log(lead, "       ",emps.length)
}
0 голосов
/ 14 апреля 2020

Простое решение с использованием фильтра и применением карты для преобразования:

function getAllInCompetentEmployeesInEnglish(){

var data = [{
    "Employee Number": 138,
    "English Competency": "No",
    "Portfolio Lead": "x",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1385,
    "English Competency": "yes",
    "Portfolio Lead": "x",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1318,
    "English Competency": "yes",
    "Portfolio Lead": "y",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "y",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "z",
    "Maths Competency": "no"
  }];


  return data.filter(item =>{
        return item['English Competency'] === 'No' ? item : false
      }).
                  map((item) => {
                    return {
                      ['English Competency']:item['English Competency'],
                      ['Portfolio Lead']: item['Portfolio Lead']
                    }
                  });     
}   

var employeesList = getAllInCompetentEmployeesInEnglish();
console.log(employeesList);

0 голосов
/ 13 апреля 2020

попробуйте так.

var data = [{
    "Employee Number": 138,
    "English Competency": "No",
    "Portfolio Lead": "x",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1385,
    "English Competency": "yes",
    "Portfolio Lead": "x",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1318,
    "English Competency": "yes",
    "Portfolio Lead": "y",
    "Maths Competency": "No"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "y",
    "Maths Competency": "yes"
  },
  {
    "Employee Number": 1388,
    "English Competency": "No",
    "Portfolio Lead": "z",
    "Maths Competency": "no"
  }
];

let x = [];
let y = [];
let z = [];

function filterData(key, val) {
    data.map(lead => {
        if(lead[key] === val) {
         if (lead['Portfolio Lead'] === 'x') return x.push(lead)
         if (lead['Portfolio Lead'] === 'y') return y.push(lead)
         if (lead['Portfolio Lead'] === 'z') return z.push(lead)  
        }
        return
    })
}

filterData('Maths Competency', 'No');
console.log(x, y, z);

и

filterData('English Competency', 'No');
console.log(x, y, z);

Или вы можете передать значение Portfolio Lead также в качестве аргумента в функции. Дайте мне знать, если у вас все еще есть сомнения.

...