filter object by javascript array

Asked

Viewed 1,377 times

1

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.class equals ['class 1', 'class 2'], I tried to use the filter but could not.

  • You want to modify the class attribute, String for Array?

  • I don’t want to filter the array where the class attribute is equal to 'class 1, or 'class 2'

  • You will pass an array as a filter, and want to get an object?

  • Is Students an Object? Could improve on that Json above, is confused.

  • sorry, students is an array of objects, I typed incorrectly

4 answers

1

Just go through with for and do the check

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);

  • right, the student value[val]['class'] is fixed being passed 'class 1' or 'class 2', but if it is a variable array turmafiltro = ['class 1', 'class 2]], you would have to do a go on this array?

1

I set an example for you using the function 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);
  • right the class value.class is fixed being passed 'class 1' or 'class 2', but if it is a variable array turmafiltro = ['class 1', 'class 2]], you would have to do one for this array?

  • Then you use the index

1


I believe that you do not need all this to solve the problem, so I understood it is only necessary to filter 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 of 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" then it is assumed that you would like to use it.

1

One possible way is to use filter and add;

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)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.