【问题标题】:How do I check if an object contains an object without using methods?如何在不使用方法的情况下检查对象是否包含对象?
【发布时间】:2018-06-17 09:57:40
【问题描述】:

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

所以下面的例子一旦工作,应该在myArray 中找到对象{'a':{'b':'c'} 两次。请注意,即使myArray[0] 对象在{'a':{'b':'c'} 之上还有一个附加属性'e': 'f',它仍应被视为包含{'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

【问题讨论】:

标签: javascript


【解决方案1】:

你可以使用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;
}

【讨论】:

  • 如果别无选择,我将需要这个,但我试图在没有类似方法的情况下做到这一点,所以在使用类似方法的快捷方式之前,我可以先看看它实际上是如何以艰难的方式完成的
猜你喜欢
  • 2022-11-09
  • 2020-06-07
  • 2012-12-04
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2010-12-16
相关资源
最近更新 更多