我正在尝试创建一个过滤对象的递归函数,具体取决于第二个传递参数中的属性。
过滤效果很好,但我的数组正在被空对象替换。我能做些什么不同以免发生这种情况?
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: {}}
答案 0 :(得分:1)
在控制台上试试这个:
> typeof []
"object"
要更强大地检查数组,可以使用Object.prototype.toString
:
> Object.prototype.toString.call([])
"[object Array]"
Object.prototype.toString
具有明确定义的所有本机对象的行为,并且非常可靠。因此,例如,如果要返回任何不是“真实”对象的内容,可以编写:
if (Object.prototype.toString(obj) !== "[object Object]") {
return obj;
}
答案 1 :(得分:1)
数组的类型为object
。因此,如果您想提前返回数组,则需要编辑此行:
if (typeof obj !== "object") { return obj; }
有很多方法可以检查数组,但这就是我要做的:
if(typeof obj !== "object" && !(obj instanceof Array)) { return obj; }