javascript - 在 javascript 中的对象数组中搜索深度嵌套的值

标签 javascript arrays

我基本上试图实现对任何给定值的搜索应该在对象键值数组中查找(也可以是嵌套对象)。这是一个例子。下面的函数将采用一个对象和一个查询来搜索数组对象键值。因此,如果找到匹配项,它应该从该数组中进行过滤。

function searchObj (obj, query) {
  for (var key in obj) {
    var value = obj[key];
    if (typeof value === 'object') {
       searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }
  }
}

这是虚拟数据

var demoData=[
  {id:1,desc:{original:'trans1'},date:'2017-07-16'},
  {id:2,desc:{original:'trans2'},date:'2017-07-12'},
  {id:3,desc:{original:'trans3'},date:'2017-07-11'},
  {id:4,desc:{original:'trans4'},date:'2017-07-15'}
];

这是我正在过滤匹配对象的数组

var searchFilter = demoData.filter(function(obj){
     return searchObj(obj, 'trans1');
});
console.log(searchFilter);

例如:如果我调用 searchObj(obj,'2017-07-15') 它会返回该特定对象,但如果我搜索 trans1 或只是 trans 它应该查看对象然后返回匹配项。我现在有点陷入困境,任何帮助将不胜感激。谢谢。

最佳答案

情况 1 有效,因为您没有遇到递归。但在情况 2 中,即使找到结果,你仍会继续搜索。

找到后返回对象。

if (typeof value === 'object') {
       return searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }

function searchObj (obj, query) {

  for (var key in obj) {
    var value = obj[key];
    if (typeof value === 'object') {
       return searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }
  }
}

var demoData=[
  {id:1,desc:{original:'trans1'},date:'2017-07-16'},
  {id:2,desc:{original:'trans2'},date:'2017-07-12'},
  {id:3,desc:{original:'trans3'},date:'2017-07-11'},
  {id:4,desc:{original:'trans4'},date:'2017-07-15'}
];

var searchFilter = demoData.filter(function(obj){
     return searchObj(obj, 'trans1');
});
console.log(searchFilter);

关于javascript - 在 javascript 中的对象数组中搜索深度嵌套的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796948/

相关文章:

javascript - 我无法更新 jquery 中的进度条宽度

javascript - Javascript onclick 错误

javascript - 在 JavaScript 中创建一个可点击的数组

python - 与常规 Python 列表相比,NumPy 有哪些优势?

javascript - 设置 cookie 1 小时并在加载时检查它

javascript - 使用 Javascript 将 <img> src 设置为 Base64 编码的图像失败

javascript - 在 HTML5 Canvas 中填充后抗锯齿边缘?

c++ - 边界未知的数组

javascript - 在 url 中传递 javascript 数组

Java : how can i remove array of words from a LinkedList<ArrayList<String>>