2017-10-14 3 views
2

Prochain noob question dans l'interminable array qui apprend une nouvelle langue. Oui, j'ai l'impression de ne rien savoir. Oui, je sais que c'est méga facile. Non, je ne peux pas comprendre par moi-même.filter() renvoie le tableau vide

J'ai un tableau auquel j'essaie d'accéder via un filtre. Aucune raison particulière, juste un défi sur l'un des sites de codage libres:

var cand = [ 
 
    { 
 
    name: 'Kevin', 
 
    alter: 19, 
 
    }, 
 
    { 
 
    name: 'Walter', 
 
    alter: 22, 
 
    }, 
 
    { 
 
    name: 'Herbert', 
 
    alter: 28, 
 
    }, 
 
    { 
 
    name: 'Kristin', 
 
    alter: 31, 
 
    }, 
 
    { 
 
    name: 'Obergine', 
 
    alter: 39, 
 
    }, 
 
    { 
 
    name: 'Hailey', 
 
    alter: 44, 
 
    } 
 
]; 
 

 
var alter = function(){ 
 
    return cand.alter < 30; 
 
} 
 

 
var filter = cand.filter(alter); 
 

 
filter;

Ce retourne un tableau vide. J'ai l'impression de ne pas accéder à chaque propriété alter correctement. J'ai également le sentiment que j'ai besoin d'une boucle qui parcourt chacune des propriétés de la personne. S'il vous plaît aider, merci

+2

'cand' est la gamme complète et n'a pas la propriété' alter'. Les objets dans le tableau font – charlietfl

Répondre

1

Définir un argument à la fonction de filtre et l'utiliser dans le retour.

var cand = [{name: 'Kevin',alter: 19,},{name: 'Walter',alter: 22,},{name: 'Herbert',alter: 28,},{ name: 'Kristin',alter: 31,},{name: 'Obergine',alter: 39,},{name: 'Hailey',alter: 44,}]; 
 

 
// add argument to the filter function | element 
 
var alter = function(element) { 
 
    return element.alter < 30; //use the argument here. 
 
} 
 

 
var filter = cand.filter(alter); 
 

 
console.log(filter);

1

Vous devez ajouter le paramètre pour le rappel.

var alter = function(cand) { 
//     ^^^^ 
    return cand.alter < 30; 
} 

var cand = [{ name: 'Kevin', alter: 19 }, { name: 'Walter', alter: 22 }, { name: 'Herbert', alter: 28 }, { name: 'Kristin', alter: 31 }, { name: 'Obergine', alter: 39 }, { name: 'Hailey', alter: 44 }]; 
 

 
var alter = function(cand){ 
 
    return cand.alter < 30; 
 
} 
 

 
var filter = cand.filter(alter); 
 

 
console.log(filter);

+0

Et comment puis-je afficher SEULEMENT les âges, ou SEULEMENT les noms de la nouvelle matrice? – Helle

+0

puis vous pouvez mapper la propriété, comme 'noms = filter.map (fonction (cand) {return cand.name;});' –

0

Le procédé filter() crée un nouveau tableau avec tous les éléments qui passent le test mis en oeuvre par la fonction fournie.

Vous devez transmettre un paramètre en tant que fonction de filtrage. Vous pouvez également utiliser le filtre ES6 avec la fonction Arrow.

Une flèche expression de la fonction a une syntaxe plus courte qu'une expression de fonction et ne lie pas ses propres arguments this, argument, super ou new.target. Ces expressions de fonction sont mieux adaptées aux fonctions non-méthodes, et elles ne peuvent pas être utilisées en tant que constructeurs.

var cand = [{name: 'Kevin',alter: 19},{name: 'Walter',alter: 22},{name: 'Herbert',alter: 28},{name: 'Kristin',alter: 31},{name: 'Obergine',alter: 39},{name: 'Hailey',alter: 44}], 
 
    alter = function(item){ 
 
    return item.alter < 30; 
 
    }, 
 
    filter = cand.filter(alter); 
 
//using normal javascript 
 
console.log('Result Using normal filter javascript :-'+JSON.stringify(filter)); 
 

 
console.log('*************************'); 
 
//You can also you ES6 with arrow function 
 

 
let filter1 = cand.filter(obj=> {return obj.alter<30}); 
 

 
console.log(`Result Using arrow function :- ${JSON.stringify(filter1)}`);

+0

Quel est le point d'amener JSON dans le jeu? Ne cherchez pas vraiment à avoir de la fantaisie, y a-t-il un avantage direct? – Helle