我正在尝试创建一个递归函数来过滤对象,具体取决于第二个传递参数中的属性。
过滤效果很好,但我的数组被替换为空对象。我可以做些什么来避免这种情况发生?
var filter = function(obj, fields) {
var key, o;
if (typeof obj !== "object") { return obj;}
o = {};
for (key in obj) {
if (fields[key]) {
o[key] = filter(obj[key], fields[key]);
}
}
return o;
};
data = {name: "John Doe", followers: [], notAllowedProp: false}
allowedFields = {name: true, followers: true}
console.log(filter(data, allowedFields));
// => Object { name: "John Doe", followers: {}}
最佳答案
在控制台上尝试一下:
> typeof []
"object"
要更可靠地检查数组,您可以使用Object.prototype.toString
:
> Object.prototype.toString.call([])
"[object Array]"
Object.prototype.toString
对于所有 native 对象都有明确定义的行为,并且非常可靠。因此,例如,如果您想返回任何不是“true”对象的内容,您可以编写:
if (Object.prototype.toString(obj) !== "[object Object]") {
return obj;
}
关于javascript - 我的递归 javascript 函数做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919908/