检查对象的递归方法
Recursive method for checking an object
所以我创建了一个构造函数,我正在尝试对其进行原型设计。我想要一种方法来检查对象中的每个 属性 以查看其是否为空以及是否 return 是密钥。如果 属性 是一个对象,我希望它也检查该子对象。
更新:
到目前为止我的代码:
function Properties(val1, val2, val3, val4){
this.prop1 = val1 || "";
this.prop2 = val2 || "";
this.prop3 = val3 || "";
this.prop4 = val4 || {};
}
Properties.prototype = {
isEmpty: function(){
for (key in this) {
if(typeof this[key] == "object" && this[key] !== null){
this[key].isEmpty();
} else {
if(!this[key]){
console.log(key);
}
}
}
}
}
var test = new Properties("Something", "", "", {subProp1: "Something Else", subProp2: "", subProp3: {subSubProp1: "", subSubProp2: "" }});
方法应该returnprop2, prop3, subProp2, subSubProp1, subSubProp2
该方法不是对象上的 属性。您需要传入相关对象。您还可以传入一个数组来跟踪空键:
var emptyKeys = [];
function isEmpty(obj, keysArr) {
for (var key in obj) {
if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
isEmpty(obj[key], keysArr);
} else {
if (obj[key] == "" || obj[key] == null) {
keysArr.push(key);
}
}
}
}
演示:http://jsfiddle.net/17rt0qy3/1/
如果你想在实际对象上使用这个,只需在 isEmpty
函数中添加上面的函数:
isEmpty: function(){
var emptyKeys = [];
amIEmpty(this, emptyKeys);
return emptyKeys;
//Actual logic
function amIEmpty(obj, keysArr) {
for (var key in obj) {
if (key == "isEmpty") {
continue;
}
if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
amIEmpty(obj[key], keysArr);
} else {
if (obj[key] == "" || obj[key] == null) {
keysArr.push(key);
}
}
}
}
}
演示:http://jsfiddle.net/17rt0qy3/2/
还有一个 fiddle 使用上面的演示对象:http://jsfiddle.net/17rt0qy3/3/
Aa 和另一个编辑,这只会 log
键,但是 它有点干净:
isEmpty: function(obj, keys) {
keys = keys || [];
obj = obj || this;
for (var key in obj) {
if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
this.isEmpty(obj[key], keys)
} else {
if (obj[key] == "" || obj[key] == null) {
keys.push(key);
}
}
}
return keys;
}
所以我创建了一个构造函数,我正在尝试对其进行原型设计。我想要一种方法来检查对象中的每个 属性 以查看其是否为空以及是否 return 是密钥。如果 属性 是一个对象,我希望它也检查该子对象。
更新:
到目前为止我的代码:
function Properties(val1, val2, val3, val4){
this.prop1 = val1 || "";
this.prop2 = val2 || "";
this.prop3 = val3 || "";
this.prop4 = val4 || {};
}
Properties.prototype = {
isEmpty: function(){
for (key in this) {
if(typeof this[key] == "object" && this[key] !== null){
this[key].isEmpty();
} else {
if(!this[key]){
console.log(key);
}
}
}
}
}
var test = new Properties("Something", "", "", {subProp1: "Something Else", subProp2: "", subProp3: {subSubProp1: "", subSubProp2: "" }});
方法应该returnprop2, prop3, subProp2, subSubProp1, subSubProp2
该方法不是对象上的 属性。您需要传入相关对象。您还可以传入一个数组来跟踪空键:
var emptyKeys = [];
function isEmpty(obj, keysArr) {
for (var key in obj) {
if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
isEmpty(obj[key], keysArr);
} else {
if (obj[key] == "" || obj[key] == null) {
keysArr.push(key);
}
}
}
}
演示:http://jsfiddle.net/17rt0qy3/1/
如果你想在实际对象上使用这个,只需在 isEmpty
函数中添加上面的函数:
isEmpty: function(){
var emptyKeys = [];
amIEmpty(this, emptyKeys);
return emptyKeys;
//Actual logic
function amIEmpty(obj, keysArr) {
for (var key in obj) {
if (key == "isEmpty") {
continue;
}
if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
amIEmpty(obj[key], keysArr);
} else {
if (obj[key] == "" || obj[key] == null) {
keysArr.push(key);
}
}
}
}
}
演示:http://jsfiddle.net/17rt0qy3/2/
还有一个 fiddle 使用上面的演示对象:http://jsfiddle.net/17rt0qy3/3/
Aa 和另一个编辑,这只会 它有点干净:log
键,但是
isEmpty: function(obj, keys) {
keys = keys || [];
obj = obj || this;
for (var key in obj) {
if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
this.isEmpty(obj[key], keys)
} else {
if (obj[key] == "" || obj[key] == null) {
keys.push(key);
}
}
}
return keys;
}