gpt4 book ai didi

javascript - 检查对象的递归方法

转载 作者:行者123 更新时间:2023-12-03 10:00:49 26 4
gpt4 key购买 nike

因此,我创建了一个构造函数,并尝试对其进行原型(prototype)设计。我想要一个方法来检查对象中的每个属性以查看其是否为空,如果为空则返回键。如果该属性是一个对象,我希望它也检查该子对象。

更新:

到目前为止我的代码:

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: "" }});

该方法应返回 prop2、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 和另一个编辑, 这只会 记录按键,但是 它更干净一点:

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;
}

演示:http://jsfiddle.net/17rt0qy3/8/

关于javascript - 检查对象的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30608675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com