2015-06-01 18 views
8

problem, że jestem stoi jest Zdejmowanie wartości w onject który ma właściwość false Tutaj jest przedmiotemUsuń fałszywych wartości przedmiotu

var myObj={105:true,183:false,108:true,106:false} 

jestem w stanie uzyskać wartości w tablica przy użyciu następującej logiki:

Object.keys(myObj) daje ["105","183","108","106"] Ale potrzebny jest sposób, aby usunąć wartości, które mają właściwość false i generować jak ["105",108"] .Can mi pomóc?

+1

właściwości iteracyjne i usunąć je – Satpal

Odpowiedz

3

Właśnie stworzyliśmy rozwiązanie swojego problemu na JSBin: Working Demo

Poniżej znajduje się kod:

var myObj={105:true,183:false,108:true,106:false}; 
var myArray = []; 

function RemoveFalseAndTransformToArray() { 
    for (var key in myObj) { 
    if(myObj[key] === false) { 
     delete myObj[key]; 
    } else { 
     myArray.push(key); 
    } 
    } 
} 
RemoveFalseAndTransformToArray(); 
console.log("myObj: ", myObj); 
console.log("myArray: ", myArray); 
// result = ["105", "108"] 

Proszę dać mi znać, jeśli masz jakiekolwiek pytania.

1

Aby usunąć te właściwości można użyć tego algorytmu:

for (k in myObj) 
{ 
    if (myObj.hasOwnProperty(k) && myObj[k] === false) 
    { 
     delete myObj[k]; 
    } 
} 

Jeśli jesteś zainteresowany tylko w tonacjach nie- false wartości, można użyć:

var keys = Object.keys(myObj).filter(function (k) { 
    return myObj[k] !== false; 
}); 

Kontrola hasOwnProperty() jest konieczne, ponieważ obiekty mogą zawierać właściwości nie będące użytkownikami (takie jak prototype), z którymi naprawdę nie chcesz zadzierać.

1

trzeba iteracyjne nad obiektem używając for...in pętlę

var myObj={105:true,183:false,108:true,106:false} 
for(var key in myObj){ 
    if(myObj.hasOwnProperty(key) && myObj[key] == false){ 
    delete myObj[key]; 
    } 
} 

console.log(JSON.stringify(myObj)) //{"105":true,"108":true} 
console.log(Object.keys(myObj)) //["105", "108"] 
6

masz klucze do obiektu w tablicy. Uruchom filtr nad nim.

var myObj={105:true,183:false,108:true,106:false}; 

var result = Object.keys(myObj).filter(function(x) { 
    return myObj[x] !== false; 
}); 
// result = ["105", "108"] 
+0

UWAGA: Ta odpowiedź wymaga IE9 + – Jason

1

Można również użyć this NPM package lub zaimportować to open source object-clean, które czyści wszystkie właściwości obiektu, który zawiera wartość falsy i zwraca nowy obiekt bez nich.

Przykład:

clean({ foo: null, bar: 'foo' }) // => { bar: 'foo' } 
+0

Pierwsza biblioteka usuwa '' 'undefined''' nie' '' false'''. Więc nie zadziała. –