javascript - 我的递归 javascript 函数做错了什么?

标签 javascript arrays object recursion

我正在尝试创建一个递归函数来过滤对象,具体取决于第二个传递参数中的属性。

过滤效果很好,但我的数组被替换为空对象。我可以做些什么来避免这种情况发生?

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/

相关文章:

javascript - 如何将新值添加到数值数组的末尾?

javascript - 有什么方法可以在单击按钮时删除过滤器

javascript - 将单词和定义列表拆分为两个数组

java - 将对象 ArrayList 转换为双列表的最佳方法是什么

java - 为什么当我使用实例方法返回另一个对象时,我当前的对象被修改了? - java

javascript - 针对不同的下拉菜单发出警报?

javascript - jQuery UI .sortable() 与 jQuery 1.2.x

java - 通过java在snappy数据中插入json对象时出现错误

javascript - 过滤掉对象数组中没有任何空值的对象

ruby-on-rails - 如何将新的键值对插入到 Rails 4 中的获取数据库对象中