2015-06-01 17 views
8

Vấn đề mà tôi phải đối mặt là -removing các giá trị trong onject rằng có tính chất false Đây là đối tượngHủy bỏ giá trị sai trong đối tượng

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

Tôi có thể nhận được các giá trị trong một mảng bằng cách sử dụng logic sau đây:

Object.keys(myObj) cho ["105","183","108","106"] Nhưng tôi cần một cách để loại bỏ các giá trị mà có tài sản sai và tạo ra như ["105",108"] .Can bạn giúp tôi ra?

+1

tính Lặp và loại bỏ chúng – Satpal

Trả lời

3

Tôi vừa mới tạo ra một giải pháp cho vấn đề của bạn trên JSBin: Working Demo

Hãy tìm thấy bên dưới mã:

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"] 

Xin vui lòng, cho tôi biết nếu bạn có bất kỳ câu hỏi.

1

Để loại bỏ những tài sản mà bạn có thể sử dụng thuật toán này:

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

Nếu bạn chỉ quan tâm đến các phím của false giá trị không, bạn có thể sử dụng:

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

Vui lòng cung hasOwnProperty() là cần thiết vì các đối tượng có thể chứa các thuộc tính không phải người dùng (chẳng hạn như prototype) mà bạn thực sự không muốn gây rối.

1

Bạn cần phải lặp qua các đối tượng sử dụng for...in loop

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

Bạn có chìa khóa của các đối tượng trong một mảng. Chạy bộ lọc trên nó.

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

Lưu ý: câu trả lời này đòi hỏi IE9 + – Jason

1

Bạn cũng có thể sử dụng this NPM package hoặc nhập mã nguồn mở object-clean để xóa tất cả các thuộc tính của đối tượng chứa giá trị giả và trả về đối tượng mới không có chúng.

Ví dụ:

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

thư viện đầu tiên loại bỏ '' 'undefined''' không' '' false'''. Vì vậy, sẽ không hoạt động. –

Các vấn đề liên quan