Digamos que tengo una matriz de cuatro objetos:
var jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ]; ¿Hay alguna manera de obtener el tercer objeto ( {a: 5, b: 6} ) por el valor de la propiedad b , por ejemplo, sin un bucle for...in ?
Filter la matriz de objetos, cuya propiedad coincide con el valor, devuelve la matriz:
var result = jsObjects.filter(obj => { return obj.b === 6 })Consulte los documentos de MDN en 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) Find el valor del primer elemento/objeto en la matriz; de lo contrario, se devuelve undefined .
var result = jsObjects.find(obj => { return obj.b === 6 })Consulte los documentos de MDN en 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)jsObjects.find(x => xb === 6)Desde MDN:
El método
find()devuelve un valor en la matriz, si un elemento de la matriz satisface la función de prueba proporcionada. De lo contrario, se devuelveundefined.
Nota al margen: los métodos como find() y las funciones de flecha no son compatibles con los navegadores más antiguos (como IE), por lo que si desea admitir estos navegadores, debe transpilar su código usando Babel .
No sé por qué estás en contra de un bucle for (presumiblemente te refieres a un for loop , no específicamente for..in ), son rápidos y fáciles de leer. De todos modos, aquí hay algunas opciones.
En bucle:
function getByValue(arr, value) { for (var i=0, iLen=arr.length; i<iLen; i++) { if (arr[i].b == value) return arr[i]; } }.filtrar
function getByValue2(arr, value) { var result = arr.filter(function(o){return ob == value;} ); return result? result[0] : null; // or undefined }.para cada
function getByValue3(arr, value) { var result = []; arr.forEach(function(o){if (ob == value) result.push(o);} ); return result? result[0] : null; // or undefined }Si, por otro lado, realmente quiso decir for..in y quiere encontrar un objeto con cualquier propiedad con un valor de 6, entonces debe usar for..in a menos que pase los nombres para verificar.
Ejemplo
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; } } } }