2017-05-13 163 views
-2

我有以下对象和值 -查找对象的值包含嵌套对象和数组

{ 
    location:"xyz", 
    title:"abc", 
    company: { 
     address:"address can have spaces", 
     name:"name" 
    }, 
    array-key :[ 
     { skill : "skill1"}, 
     { skill : "skill2"}, 
     { skill : "skill3"} 
    ], 
    description :"brief description" 
} 

,现在我有一个价值 - “空间”,现在我要检查,如果“空间”存在于任何级别的对象中。如果“空格”存在,函数应该返回true。

我尝试了递归的方式,但我应该如何处理数组?

回答

2

在对象上递归迭代的一个有用技巧是使用replacer参数JSON.stringify

function findString(obj, regexp) { 
    let found = false; 

    JSON.stringify(obj, (k, v) => { 
    if (found || typeof v === 'string' && regexp.test(v)) found = true; 
    else return v; 
    }); 

    return found; 
} 
0

只是为了完整性与迭代各级递归和检查值strict或作为字符串,并将String#indexOf

function check(object, value) { 
 
    return Object.keys(object).some(function (key) { 
 
     if (object[key] && typeof object[key] === 'object') { 
 
      return check(object[key], value); 
 
     } 
 
     return object[key] === value || object[key].toString().indexOf(value) + 1; 
 
    }); 
 
} 
 

 
var data = { location: "xyz", title: "abc", company: { address: "address can have spaces", name: "name" }, arrayKey: [{ skill: "skill1" }, { skill: "skill2" }, { skill: "skill3" }], description: "brief description" }; 
 

 
console.log(check(data, "spaces")); 
 
console.log(check(data, "foo"));