Obtenir un objet JavaScript à partir d'un tableau d'objets par la valeur d'une propriété.

Disons que j'ai un tableau de quatre objets :

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

Existe-t-il un moyen de récupérer le troisième objet ({a : 5, b : 6}) par la valeur de la propriété b par exemple sans boucle for...in ?

Filtre tableau d'objets, dont la propriété correspond à la valeur, retourne un tableau :

var result = jsObjects.filter(obj => {
  return obj.b === 6
})

Voir la [Fiche MDN sur Array.prototype.filter()][1].

const jsObjects = [
  {a: 1, b: 2}, 
  {a: 3, b: 4}, 
  {a: 5, b: 6}, 
  {a: 7, b: 8}
]

let result = jsObjects.filter(obj => {
  return obj.b === 6
})

console.log(result)

Trouver la valeur du premier élément/objet du tableau, sinon undefined est retourné.

var result = jsObjects.find(obj => {
  return obj.b === 6
})

Voir la [Docs MDN sur Array.prototype.find()][2].

const jsObjects = [
  {a: 1, b: 2}, 
  {a: 3, b: 4}, 
  {a: 5, b: 6}, 
  {a: 7, b: 8}
]

let result = jsObjects.find(obj => {
  return obj.b === 6
})

console.log(result)

[1] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter [2] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Commentaires (19)

Je ne sais pas pourquoi vous êtes contre une boucle for (je suppose que vous vouliez dire une boucle for, pas spécifiquement for..in), elles sont rapides et faciles à lire. Quoi qu'il en soit, voici quelques options.

Boucle for :


function getByValue(arr, value) {

  for (var i=0, iLen=arr.length; i
Commentaires (6)

Si je comprends bien, vous voulez trouver l'objet dans le tableau dont la propriété b est 6 ?

var found;
jsObjects.some(function (obj) {
  if (obj.b === 6) {
    found = obj;
    return true;
  }
});

Ou si vous utilisiez l'underscore :

var found = _.select(jsObjects, function (obj) {
  return obj.b === 6;
});
Commentaires (4)