1228 votes

Obtenir l’objet javascript de tableau d’objets de valeur ou des biens

Disons que j’ai un 4 objets comme suit dans un tableau :

Est-il possible que je peux obtenir le troisième objet par la valeur de la propriété par exemple sans une `` boucle ?

1722voto

elclanrs Points 40467
var result = jsObjects.filter(function( obj ) {
  return obj.b == 6;
});

193voto

RobG Points 41170

Je ne sais pas pourquoi vous êtes contre une boucle for (sans doute que vous vouliez dire d'une boucle for, ce n'est précisément..), ils sont rapides et faciles à lire. De toute façon, voici quelques options.

Pour la boucle:

function getByValue(arr, value) {

  for (var i=0, iLen=arr.length; i<iLen; i++) {

    if (arr[i].b == value) return arr[i];
  }
}

.filtre

function getByValue2(arr, value) {

  var result  = arr.filter(function(o){return o.b == value;} );

  return result? result[0] : null; // or undefined

}

.forEach

function getByValue3(arr, value) {

  var result = [];

  arr.forEach(function(o){if (o.b == value) result.push(o);} );

  return result? result[0] : null; // or undefined

}

Si, d'autre part, vous vraiment ne signifie pas pour..et que vous voulez trouver un objet avec n'importe quelle propriété avec une valeur de 6, alors vous devez utiliser pour..à moins que vous ne passiez les noms à vérifier. par exemple

function getByValue4(arr, value) {
  var o;

  for (var i=0, iLen=arr.length; i<iLen; i++) {
    o = arr[i];

    for (var p in o) {
      if (o.hasOwnProperty(p) && o[p] == value) {
        return o;
      }
    }
  }
}

21voto

Amir Points 108

Il ressemble à la ECMAScript 6 proposition il y a le Tableau des méthodes find() et findIndex(). La mozilla page propose également des polyfills que vous pouvez inclure pour obtenir la fonctionnalité de ces sur tous les navigateurs.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].find(isPrime) ); // undefined, not found
console.log( [4, 5, 8, 12].find(isPrime) ); // 5

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].findIndex(isPrime) ); // -1, not found
console.log( [4, 6, 7, 12].findIndex(isPrime) ); // 2

19voto

nickf Points 185423

Si je comprends bien, vous voulez trouver l’objet dans le tableau dont propriété est ?

Ou si vous utilisiez le trait de soulignement :

4voto

tom Points 5216

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