Obter objecto JavaScript a partir de um conjunto de objectos por valor de propriedade

Digamos que eu tenho um conjunto de quatro objetos:

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

Existe alguma forma de conseguir o terceiro objeto ({a: 5, b: 6}) pelo valor da propriedade b por exemplo sem um loop `for...in'?

O Filtro array de objetos, cuja propriedade corresponde ao valor, retorna array:

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

Veja o MDN Docs on Array.prototype.filter()

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)

Encontrar' o valor do primeiro elemento/objeto do array, caso contrário 'indefinido' é retornado.

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

Veja o MDN Docs on Array.prototype.find()

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)
Comentários (19)

Eu não'não sei porque você está contra um loop a favor (presumivelmente você quis dizer um loop a favor, não especificamente para...in), eles são rápidos e fáceis de ler. De qualquer forma, aqui's algumas opções.

Para loop:


function getByValue(arr, value) {

  for (var i=0, iLen=arr.length; i
Comentários (6)

Se eu entendi corretamente, você quer encontrar o objeto no array cuja propriedade b' é6'?

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

Ou se você estivesse a usar o underscore:

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