javascript 中是否有一个类似于 Python 的实现 .__contains__() 的 .contains 方法? - node.js

Is there a .contains method in javascript that works similar to Python's implimentation .__contains__()? - node.js

我想知道 javascript 中是否有任何 object.contains 方法的实现与 Python 版本 object.__contains__() 的工作方式类似,如我希望能够使用嵌套对象扫描整个对象,以查看是否有一个键或一个值确实包含该方法将其与之进行比较的内容。我知道 Javascript 中还有其他方法可以做到这一点,例如使用 filtersome,但它们对我不起作用。

person: {
  name: 'Bob',
  age: 40,
  items: {
    cars: 4,
    house: 1,
    computer: 2
  }
}

我需要扫描整个对象的东西,而不仅仅是它的第一层(即 nameageitems,如果您搜索 cars 你不会得到任何回应)。

我不这么认为。一个天真的想法是

JSON.stringify(target).includes( JSON.stringify( search ) )

如果 search 不是字符串,则效果不佳,因为它也会在字符串内部匹配。一个非天真的方法是这样的:

const contains = (obj, search) => 
 Object.keys(obj).includes(search) ||
 Object.values(obj).includes(search) ||
 Object.values(obj)
   .filter(it => typeof it === "object" && it !== null)
   .some(it => contains(it, search));

我猜没有标准函数,但你肯定可以使用一些 typeofObject.entries() 编写自定义 递归 函数。

let person =  {
  name: 'Bob',
  age: 40,
  items: {
    cars: 4,
    house: 1,
    computer: 2
  }
};

function searchForTerm(obj,item){
  
  for(let [key,val] of Object.entries(obj)){
    if(key == item){
      return true;
    }
    else if(typeof val === 'object')  
     {
       if(searchForTerm(val,item)){
         return true;
       }
     }
    else if(val == item){
      return true;
    }
  }
  return false;
}

console.log(searchForTerm(person,40));
console.log(searchForTerm(person,43));
console.log(searchForTerm(person,'Bob'));
console.log(searchForTerm(person,'cars'));
console.log(searchForTerm(person,'truck'));

我在第一种情况下使用 ==,所以没有进行类型检查。

很明显,这是一个启动器,您可以根据需要进行修改。但这应该能让你继续。