Tarkime, kad turiu keturių objektų masyvą:
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
Ar yra būdas, kuriuo galėčiau gauti trečiąjį objektą ({a: 5, b: 6}
) pagal savybės b
reikšmę, pavyzdžiui, be for...in
ciklo?
Filtro
objektų masyvas, kurio savybė atitinka reikšmę, grąžinamas masyvas:
var result = jsObjects.filter(obj => {
return obj.b === 6
})
Žr. MDN dokumentus apie 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)
Nustatoma
pirmojo masyvo elemento/objekto reikšmė, priešingu atveju grąžinama neapibrėžta
reikšmė.
var result = jsObjects.find(obj => {
return obj.b === 6
})
Žr. MDN dokumentus apie 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)
Nežinau, kodėl esate prieš for ciklą (tikriausiai turėjote omenyje for ciklą, o ne konkrečiai for..in), jie yra greiti ir lengvai skaitomi. Šiaip ar taip, štai keletas variantų.
For ciklas:
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
}
Kita vertus, jei iš tiesų turėjote omenyje for..in ir norite surasti objektą su bet kuria savybe, kurios reikšmė yra 6, tuomet turite naudoti for..in, nebent perduodate tikrintinus vardus. pvz.
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;
}
}
}
}
Jei teisingai suprantu, jūs norite rasti objektą masyve, kurio savybė b
yra 6
?
var found;
jsObjects.some(function (obj) {
if (obj.b === 6) {
found = obj;
return true;
}
});
Arba, jei naudojote underscore:
var found = _.select(jsObjects, function (obj) {
return obj.b === 6;
});