如何在不使用方法的情况下检查对象是否包含对象?

时间:2018-06-17 09:57:41

标签: javascript

我正在尝试使用部分匹配样式检查对象是否包含其中的另一个对象。

因此,以下示例应在{'a':{'b':'c'}中找到对象myArray两次。请注意,即使myArray[0]对象在'e': 'f'之上还有{'a':{'b':'c'}的附加属性,但仍应将其视为包含{'a':{'b':'c'}

我想避免使用任何方法,例如reduce或map。

const myArray = [
  {
    'a': {
      'b': 'c',
      'e': 'f',
    }
  },
    {
    'a': {
      'b': 'c'
    }
  },
    {
    'd': {
      'e': 'f'
    }
  },
]

function contains(array, index, object) {
  if () { // implementation???
    return true
  } 
  else {
    return false
  }
}

function quantityOfObjectInArray(object, array) {  
  var count = 0;
  for (var i = 0; i < this.length; ++i) {
    if ( contains(array, i, object) ) {
    	count++;
    }
  }
  return count
}

var quantity = quantityOfObjectInArray({'a':{'b':'c'}}, myArray) 
console.log(quantity) // expect: 2

1 个答案:

答案 0 :(得分:0)

您可以使用Object.entries递归地比较对象:

function has(obj, proto) {
  for(const [key, value] of Object.entries(proto)) {
    if(typeof value === "object") {
      if(!obj[key] || !has(obj[key], value))
         return false;
    } else if(obj[key] !== value) {
      return false;
    }
  }
  return true;
}