在javascript中的对象数组中搜索深度嵌套的值 [英] Search a deeply nested value in array of objects in javascript

查看:42
本文介绍了在javascript中的对象数组中搜索深度嵌套的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm basically trying to implement a search for any given value should look in the array of object key values(there can also be nested objects). Here is an example. The below function will take an object and a query to search in array objects key values. So, if a match is found it should filter from that array.

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'}
];

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

here is the array I'm filtering object of the match

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

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

for example: if I call searchObj(obj,'2017-07-15') it returns that particular object but if I search for trans1 or simply trans it should look into the object and then return the match. I'm kinda stuck now any help would be appreciated. Thanks.

推荐答案

案例1正在运行,因为您未实现递归.但是在第2种情况下,即使找到结果,您仍会继续搜索.

Case 1 is working because you are not hitting the recursion. But in case 2, you are keep searching even after found the result.

找到后返回对象.

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中的对象数组中搜索深度嵌套的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆