Pieņemsim, ka man ir četru objektu masīvs:
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
Vai ir veids, kā es varu iegūt trešo objektu ({a: 5, b: 6}}), piemēram, pēc īpašības
bvērtības bez
for...in` cikla?
Filtra
objektu masīvs, kura īpašība atbilst vērtībai, atgriež masīvu:
var result = jsObjects.filter(obj => {
return obj.b === 6
})
Skatīt MDN dokumentos par Array.prototipe.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)
Atrod pirmā elementa/objekta vērtību masīvā, pretējā gadījumā tiek atgriezta nedefinēta
vērtība.
var result = jsObjects.find(obj => {
return obj.b === 6
})
Skatīt MDN dokumentos par Array.prototipe.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)
Es nezinu, kāpēc jūs esat pret for cilpu (domājams, jūs domājāt for cilpu, nevis tieši for..in), tie ir ātri un viegli lasāmi. Lai vai kā, šeit ir dažas iespējas.
For cilpa:
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
}
Ja, no otras puses, jūs patiešām domājāt for..in un vēlaties atrast objektu ar jebkuru īpašību, kuras vērtība ir 6, tad jums ir jāizmanto for..in, ja vien jūs nenododat vārdus pārbaudei. piem.
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;
}
}
}
}
Ja es pareizi saprotu, jūs vēlaties atrast objektu masīvā, kura b
īpašība ir 6
?
var found;
jsObjects.some(function (obj) {
if (obj.b === 6) {
found = obj;
return true;
}
});
Vai arī, ja jūs izmantojat pasvītrojumu:
var found = _.select(jsObjects, function (obj) {
return obj.b === 6;
});