filter object by array javascript

1

I have the following object:

alunos : { nome: 'teste',
           idade: '15',
           turma: 'turma 1'},
          { nome: 'teste2',
           idade: '16',
           turma: 'turma 2'},
          { nome: 'teste3',
           idade: '12',
           turma: 'turma 2'},
          { nome: 'teste3',
           idade: '14',
           turma: 'turma 4'},
          { nome: 'teste6',
           idade: '13',
           turma: 'turma 4'},

I need to create a new array where students.turma is equal to ['class 1', 'class2'], I tried to use the filter but I could not.

    
asked by anonymous 07.12.2017 / 12:32

4 answers

1

I think I do not need all this to solve the problem, so I understand you only need to filter the classes 1 and 2, so a simple one-liner solves:

alunos.filter(function(item){ return (['turma 1', 'turma 2'].indexOf(item.turma) !== -1); });

That returns an array with the 3 classes found:

[{nome: "teste", idade: "15", turma: "turma 1"},
{nome: "teste2", idade: "16", turma: "turma 2"},
{nome: "teste3", idade: "12", turma: "turma 2"}]

I used the filter because op said "tentei usar filter mas não consegui" soon assumed that I would like to use it.

    
07.12.2017 / 13:02
1

Just go with for and do the verification

let alunos = [ { nome: 'teste',
           idade: '15',
           turma: 'turma 1'},
          { nome: 'teste2',
           idade: '16',
           turma: 'turma 2'},
          { nome: 'teste3',
           idade: '12',
           turma: 'turma 2'},
          { nome: 'teste3',
           idade: '14',
           turma: 'turma 4'},
          { nome: 'teste6',
           idade: '13',
           turma: 'turma 4'} ];
           
let resul = [];
           
for(val in alunos)
  if(alunos[val]['turma'] === "turma 1" || alunos[val]['turma'] === "turma 2")
    resul.push(alunos[val]);

console.log(resul);
    
07.12.2017 / 12:42
1

I've assembled an example for you using the filter

var alunos = [{ nome: 'teste',
               idade: '15',
               turma: 'turma 1'},
              { nome: 'teste2',
               idade: '16',
               turma: 'turma 2'},
              { nome: 'teste3',
               idade: '12',
               turma: 'turma 2'},
              { nome: 'teste3',
               idade: '14',
               turma: 'turma 4'},
              { nome: 'teste6',
               idade: '13',
               turma: 'turma 4'}];

var turmafiltro = ['turma 1', 'turma 2'];

function checkTurma(turma) {    
    if (turmafiltro.indexOf(turma.turma) >= 0)
    return true;
}

var result = alunos.filter(checkTurma);
console.log(result);
    
07.12.2017 / 12:44
1

One possible way is to use filter and some;

var alunos = [{
		nome: 'teste',
		idade: '15',
		turma: 'turma 1'
	},
	{
		nome: 'teste2',
		idade: '16',
		turma: 'turma 2'
	},
	{
		nome: 'teste3',
		idade: '12',
		turma: 'turma 2'
	},
	{
		nome: 'teste3',
		idade: '14',
		turma: 'turma 4'
	},
	{
		nome: 'teste6',
		idade: '13',
		turma: 'turma 4'
	}
]
var turmas = ['turma 1', 'turma 2'];

var filtrados = alunos.filter(function(a) {
	return turmas.some(function(t) {
		return a.turma === t;
	})
})

console.log(filtrados)
    
07.12.2017 / 13:05