Diyelim ki dört nesneden oluşan bir dizim var:
var jsObjects = [
{a: 1, b: 2},
{a: 3, b: 4},
{a: 5, b: 6},
{a: 7, b: 8}
];
Üçüncü nesneyi ({a: 5, b: 6}
) b
özelliğinin değerine göre örneğin for...in
döngüsü olmadan alabilmemin bir yolu var mı?
Özelliği değerle eşleşen nesnelerin Filter
dizisi, dizi döndürür:
var result = jsObjects.filter(obj => {
return obj.b === 6
})
Array.prototype.filter()]1 hakkındaki MDN Dokümanlarına bakın
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)
Dizideki ilk elemanın/nesnenin değerini bul
, aksi takdirde undefined
döndürülür.
var result = jsObjects.find(obj => {
return obj.b === 6
})
Array.prototype.find()]2 hakkındaki MDN Dokümanlarına bakın
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)
Neden for döngüsüne karşı olduğunuzu bilmiyorum (muhtemelen for döngüsünü kastettiniz, özellikle for..in değil), hızlıdırlar ve okunmaları kolaydır. Her neyse, işte bazı seçenekler.
Döngü için:
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
}
Öte yandan, gerçekten for..in demek istediyseniz ve değeri 6 olan herhangi bir özelliğe sahip bir nesne bulmak istiyorsanız, kontrol edilecek isimleri geçmediğiniz sürece for..in kullanmanız gerekir. ör.
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;
}
}
}
}
Eğer doğru anladıysam, dizide b
özelliği 6
olan nesneyi bulmak istiyorsunuz?
var found;
jsObjects.some(function (obj) {
if (obj.b === 6) {
found = obj;
return true;
}
});
Ya da alt çizgi kullanıyor olsaydınız:
var found = _.select(jsObjects, function (obj) {
return obj.b === 6;
});