95 votes

javascript filtre tableau d'objets

J'ai un tableau d'objets et je me demande quelle est la meilleure façon d'y effectuer une recherche. Dans l'exemple ci-dessous, comment puis-je rechercher name = "Joe" y age < 30 ? Est-ce que jQuery peut m'aider ou est-ce que je dois effectuer cette recherche par force brute moi-même ?

var names = new Array();

var object = { name : "Joe", age:20, email: "joe@hotmail.com"};
names.push(object);

object = { name : "Mike", age:50, email: "mike@hotmail.com"};
names.push(object);

object = { name : "Joe", age:45, email: "mike@hotmail.com"};
names.push(object);

0 votes

Par recherche, vous voulez dire filtre ?

0 votes

Recherche != filtre. Lequel voulez-vous ?

3voto

Parth Raval Points 1074
var names = [{
        name: "Joe",
        age: 20,
        email: "joe@hotmail.com"
    },
    {
        name: "Mike",
        age: 50,
        email: "mike@hotmail.com"
    },
    {
        name: "Joe",
        age: 45,
        email: "mike@hotmail.com"
    }
];
const res = _.filter(names, (name) => {
    return name.name == "Joe" && name.age < 30;

});
console.log(res);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>

1voto

Cody Points 1198

Alors, question rapide. Que se passe-t-il si vous avez deux tableaux d'objets et que vous souhaitez "aligner" ces tableaux d'objets afin de vous assurer que les objets de chaque tableau sont dans le même ordre que ceux de l'autre tableau ? Et si vous ne savez pas quelles clés et quelles valeurs contiennent les objets à l'intérieur des tableaux... Et encore moins dans quel ordre ils se trouvent ?

Vous avez donc besoin d'une "expression joker" pour votre [].filter , [].map etc. Comment obtenir une expression joker ?

var jux = (function(){
    'use strict';

    function wildExp(obj){
        var keysCrude = Object.keys(obj),
            keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '),
            keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '),
            keys = [].concat(keysA, keysB)
                .sort(function(a, b){  return a.substring(1, a.length) > b.substring(1, b.length); });
        var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a');
        return exp;
    }

    return {
        sort: wildExp
    };

})();

var sortKeys = {
    k: 'v',
    key: 'val',
    n: 'p',
    name: 'param'
};
var objArray = [
    {
        k: 'z',
        key: 'g',
        n: 'a',
        name: 'b'
    },
    {
        k: 'y',
        key: 'h',
        n: 'b',
        name: 't'
    },
    {
        k: 'x',
        key: 'o',
        n: 'a',
        name: 'c'
    }
];
var exp = jux.sort(sortKeys);

console.log('@juxSort Expression:', exp);
console.log('@juxSort:', objArray.sort(function(a, b){
    return eval(exp);
}));

Vous pouvez également utiliser cette fonction sur une itération pour chaque objet afin de créer une meilleure expression collective pour toutes les clés de chacun de vos objets, puis filtrer votre tableau de cette façon.

Il s'agit d'un petit extrait de l'API Juxtapose que j'ai presque terminé, qui fait cela, l'égalité des objets avec des exemptions, les unités d'objets, et la condensation des tableaux. Si ce sont des choses dont vous avez besoin ou que vous voulez pour votre projet, veuillez commenter et je rendrai la librairie accessible le plus tôt possible.

J'espère que cela vous aidera ! Bon codage :)

1voto

Kasra Khosravi Points 23

L'approche la plus simple et la plus lisible sera l'utilisation de la méthode de filtrage en javascript.

Le filtre natif javaScript adopte une approche déclarative pour filtrer les éléments d'un tableau. Puisqu'il s'agit d'une méthode définie sur Array.prototype, elle itère sur un tableau fourni et invoque un callback sur celui-ci. Ce callback, qui agit comme notre fonction de filtrage, prend trois paramètres :

element - l'élément actuel dans le tableau sur lequel on itère

index - l'index ou l'emplacement de l'élément courant dans le tableau sur lequel on itère.

array - le tableau original sur lequel la méthode de filtrage a été appliquée Utilisons cette méthode de filtrage dans un exemple. Notez que le filtre peut être appliqué à n'importe quel type de tableau. Dans cet exemple, nous allons filtrer un tableau d'objets sur la base d'une propriété d'objet.

Un exemple de filtrage d'un tableau d'objets basé sur les propriétés de l'objet pourrait ressembler à ceci :

// Please do not hate me for bashing on pizza and burgers.
// and FYI, I totally made up the healthMetric param :)
let foods = [
  { type: "pizza", healthMetric: 25 },
  { type: "burger", healthMetric: 10 },
  { type: "salad", healthMetric: 60 },
  { type: "apple", healthMetric: 82 }
];
let isHealthy = food => food.healthMetric >= 50;

const result = foods.filter(isHealthy);

console.log(result.map(food => food.type));
// Result: ['salad', 'apple']

Pour en savoir plus sur le filtrage des tableaux dans les fonctions et pour créer votre propre filtrage, consultez cet article : https://medium.com/better-programming/build-your-own-filter-e88ba0dcbfae

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X