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
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<iLen; i++) {
if (arr[i].b == value) return arr[i];
}
}
.filter
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, par contre, vous vouliez vraiment dire for..in et que vous voulez trouver un objet dont l'une des propriétés a la valeur 6, alors vous devez utiliser for..in à 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;
}
}
}
}
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;
});