Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';t此工作(删除与对象属性匹配的属性)_Javascript_Object - Fatal编程技术网

Javascript 为什么不是';t此工作(删除与对象属性匹配的属性)

Javascript 为什么不是';t此工作(删除与对象属性匹配的属性),javascript,object,Javascript,Object,为什么这不起作用?实现removeproperty函数,该函数接受对象和属性名称,如果它们匹配则将其删除,如果不匹配则返回true function removeProperty(obj, prop) { const keys = Object.keys(obj) for (const key of keys) { if (key === obj[prop]) { delete obj[prop] return true } }

为什么这不起作用?实现removeproperty函数,该函数接受对象和属性名称,如果它们匹配则将其删除,如果不匹配则返回true

function removeProperty(obj, prop) {

  const keys = Object.keys(obj)

  for (const key of keys) {

    if (key === obj[prop]) {

      delete obj[prop]

      return true
    }
  }
  return false
}

因为
obj[prop]
是值。将
道具
进行比较:

function removeProperty(obj, prop) {
  const keys = Object.keys(obj)

  for (const key of keys) {
    if (key === prop) {
      delete obj[prop]

      return true
    }
  }
  return false
}
但是,由于对象属性是唯一的,所以不需要迭代它们。使用检查属性是否存在:

function removeProperty(obj, prop) {
  if (prop in obj) {
    delete obj[prop]

    return true
  }

  return false
}

因为
obj[prop]
是值。将
道具
进行比较:

function removeProperty(obj, prop) {
  const keys = Object.keys(obj)

  for (const key of keys) {
    if (key === prop) {
      delete obj[prop]

      return true
    }
  }
  return false
}
但是,由于对象属性是唯一的,所以不需要迭代它们。使用检查属性是否存在:

function removeProperty(obj, prop) {
  if (prop in obj) {
    delete obj[prop]

    return true
  }

  return false
}

所以,刚刚修复了if to

如果(对象[键]==对象[属性])


它成功了。有人能解释一下这与问题代码之间的区别吗

那么,就把if改成

如果(对象[键]==对象[属性])


它成功了。有人能解释一下这与问题代码之间的区别吗?

您不需要迭代键来删除单个属性

函数removeProperty(对象、属性){
如果(对象类型[属性]!=“未定义”){
删除obj[prop];
返回true;
}
返回false;
}

不需要迭代键来删除单个属性

函数removeProperty(对象、属性){
如果(对象类型[属性]!=“未定义”){
删除obj[prop];
返回true;
}
返回false;
}
设o={a:1,b:2};
removeProperty(o,‘a’)
函数removeProperty(对象、属性){
删除obj[prop];
}
console.log(o)
设o={a:1,b:2};
removeProperty(o,‘a’)
函数removeProperty(对象、属性){
删除obj[prop];
}

console.log(o)
这里不清楚“如果匹配”是什么意思
prop
在代码中并没有真正用作属性名。不清楚“如果它们匹配”在这里的含义
prop
在代码中并没有真正用作属性名。这是错误的解决方案。如果有多个属性具有相同的值,则此操作无效。您需要查找键,而不是属性的值。见Ori Drori的答案。这是错误的解决方案。如果有多个属性具有相同的值,则此操作无效。您需要查找键,而不是属性的值。见Ori Drori的答案。in是如何工作的?这仅仅是针对对象的吗?我添加了一个链接,可以深入解释
的描述是:如果指定的属性位于指定的对象或其原型链中,in运算符将返回true。in如何工作?这仅仅是针对对象的吗?我添加了一个链接,可以深入解释
中的
说明是:如果指定的属性位于指定的对象或其原型链中,则in运算符返回true。