如何检查深层物体是否有价值

瑞安·克罗斯(Ryan Crosser)

我需要检查深层对象是否包含特定值并返回true / false。此对象的嵌套对象或数组的数量不受限制。

// sample object
{
  "id": 2,
  "name": "Mann Anderson",
  "documents": [
    {
      "score": 36,
      "documentTitle": "Document Title: 8397640",
      "source": "RAND Data"
    }
  ],
  "emailAddresses": [
    "[email protected]"
  ]
}

并且正在使用此递归函数遍历对象:

function deepQuery(value, q){
  if(_.isArray(value) || _.isPlainObject(value)) {
    _.each(value, function(v, k) {
      return deepQuery(v, q);
    });
  } else if(value.toString().toLowerCase().indexOf(q) !== -1) {
    console.log(true);
    return true;
  }
}

该功能似乎可以正常工作(the console.log(true)在预期时出现),但是我只能从undefined该功能中得到结果。

起初,我认为这是因为我没有将递归调用返回给deepQuery(),但是如您所见,事实并非如此。

丹尼斯·塞古雷

那里:

_.each(value, function(v, k) {
  return deepQuery(v, q);
});

您只是从传递给的回调中返回_.each,而不是从函数中返回。当然,返回只会返回第一个更深层调用的值,而不是第一个肯定搜索的值。

更改为

var v = false;
_.each(value, function(v, k) {
   v |= deepQuery(v, q);
});
return v;

或更好:使用良好的旧for循环来完全避免问题(并避免在找到匹配项时继续迭代):

function deepQuery(value, q){
   if (_.isArray(value)) {
    for (var i=0; i<value.length; i++) {
        if (deepQuery(value[i], q)) return true;
    }
   } else if(_.isPlainObject(value)) {
    for (var k in value) {
        if (deepQuery(value[k], q)) return true;
    }
  } else if(value.toString().toLowerCase().indexOf(q) !== -1) {
    return true;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检查深层物体是否有价值

来自分类Dev

如何检查SQL列是否有价值?

来自分类Dev

如何检查数据属性是否有价值

来自分类Dev

如何检查隐藏字段是否没有价值?

来自分类Dev

如何使用Jquery检查表是否有价值

来自分类Dev

检查任何输入是否有价值

来自分类Dev

在网站刷新后如何检查跨度是否有价值

来自分类Dev

如何检查对象的 1 个以上的属性是否有价值

来自分类Dev

PHP:检查数组键是否有价值

来自分类Dev

检查从存储过程返回的字段是否有价值?

来自分类Dev

如何确定二维数组是否有价值?

来自分类Dev

通过循环创建具有价值的深层对象

来自分类Dev

如何检查镜头前是否有物体?

来自分类Dev

R表示组是否有价值

来自分类Dev

Swift-NSUserDefaults是否有价值?

来自分类Dev

检查文本框是否有价值,使其他文本框为必需

来自分类Dev

检查文本框是否有价值,使其他文本框为必需

来自分类Dev

如何添加没有价值的属性

来自分类Dev

如何检查物体是否在移动

来自分类Dev

如何检查物体是否在路上?

来自分类Dev

如何确定有价值的行的优先级

来自分类Dev

如何查找仅具有价值的MongoDB文档?

来自分类Dev

如何使具有价值的枚举作为对象?

来自分类Dev

如何显示在Laravel中有价值的多列

来自分类Dev

我如何获得没有价值的td?

来自分类Dev

如何获得li元素的所有价值

来自分类Dev

这个Javascript变数如何具有价值?

来自分类Dev

当meta标签有价值时,如何添加类

来自分类Dev

PHP没有价值