实现removeProperty函数,该函数接受一个对象和一个属性名称

Implement the removeProperty function that takes an object and a property name

本文关键字:函数 一个 属性 removeProperty 一个对象 实现      更新时间:2023-09-26

实现removeProperty函数,该函数接受对象和属性名称,并执行以下操作:

如果对象obj具有属性prop,它将从对象中删除该属性。如果属性已被删除,则返回true;否则返回false。

这个代码出了什么问题?

function removeProperty(obj,prop) {
if(obj.hasOwnProperty('prop'))
  {
    console.log(obj);
    delete obj.prop;
    return true;
  }
  else
    {
      return false;
    }
}
var obj= {
  name:"John"
};
removeProperty({obj,'name'});

预期的代码为:

function removeProperty(obj, prop) {
if(prop in obj){
  delete obj[prop];
  return true;
}else{
  return false;
 }
}

解释:

hasOwnProperty((方法返回一个布尔值,指示对象是否将指定的属性作为自己的(非继承的(属性。因此,要验证自己和继承的属性,也可以使用中的

括号表示法将是比obj.pop更好的选择。由于方括号表示法允许使用点表示法不能使用的字符(如数字(,它还允许使用变量选择属性。在当前场景中,应使用括号表示法。

以下是可能有用的完整代码。有很多方法可以做到这一点。

<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<p onclick="removeProperty(obj,'name')">This example calls :</p>
<script>
function removeProperty(obj,prop){
if(obj.hasOwnProperty(prop)) {
    console.log(obj);
    var b = delete obj.prop;
    console.log(b);
    return true;
  }
  else {
      return false;
    }
}
var obj= {
  name:"John"
};
// removeProperty(obj,'name');
</script>
</body>
</html>

代码中的错误是由于传递给removeProperty函数的参数引起的。它需要两个参数,而您传递的是1,这是错误的。

您试图将{obj, 'name'}作为两个参数传递,而实际上它是一个对象的单个参数。

相反,您应该编写removeProperty(obj, 'name');并将if(obj.hasOwnProperty('prop'))更改为if(obj.hasOwnProperty(prop)),因为参数是一个带字符串的变量。

以下是您的代码的工作版本:

function removeProperty(obj,prop) {
if(obj.hasOwnProperty(prop)) {
    console.log(obj);
    delete obj.prop;
    return true;
  }
  else
    {
      return false;
    }
}
var obj= {
  name:"John"
};
removeProperty(obj,'name');

这里有一个优化版本:

function removeProperty(obj, prop) {
  if (obj[prop] !== undefined) {
    console.log(obj);
    delete obj[prop];
    return true;
  }
  return false;
};
var obj= {
  name:'John'
};
removeProperty(obj,'name');

我有点处理同一个问题,但这里有它的解决方案:

function removeProperty(obj, prop) {
  if (obj && obj.hasOwnProperty(prop)) {
    delete obj[prop];
    return true;
  }
  return false;
}

当他们说prop是一个属性时,他们指的是obj中任何一个名为prop的键。如果你试图在没有ticks作为值的情况下访问它,那么它应该可以工作。

注意:我知道回答这个问题已经晚了,但我在这里找不到合适的问题,所以还是回答了。感谢

function removeProperty(obj, prop) {
  if(obj.hasOwnProperty(prop)){
    delete obj[prop];
    return true;
  }

  return false;
}

这是我的方法:

函数removeProperty(obj,prop({

if(obj.hasOwnProperty(prop(({

delete obj[prop];
return true;

}

return false;}

function removeProperty(obj, prop) {
  if(obj.hasOwnProperty(prop)) {
    delete obj[prop]
    return true
  } else {
    return false;
  }
}
function removeProperty(obj, prop) {
if (obj[prop] != undefined) {
    delete obj[prop];
    return true;
} else {
    return false;
}
return null;
}

尝试通过以下任何方法检查对象中是否存在属性:

  1. object.hasOwnProperty(propName(
  2. 对象中的propName
  3. 正在与未定义的对象.propName进行比较!==未定义的
function removeProperty(obj, prop) {
    if('undefined' !== typeof(obj[prop])){
      delete obj[prop];
      return true;
    }
  return false;
  //return false;
}

这是做这个问题的另一个逻辑,但不是有效的逻辑,因为它变异了原始对象,这不是推荐的好做法。

解决这个问题的另一种方法是使用spread操作符,它不会改变原始对象,而是创建新对象的副本。

function removeProperty(obj, prop) {
   if(obj?[prop]){
     const {prop, ...obj} = obj;
     return true;
   }
   return false;
}
This solution might not work in old versions of javascript before ES6 as spread operator is availaible from ES6.

使用下面的示例方法:

function removeProperty(obj, prop) {
  if(prop in obj) {
        delete obj[prop];
        console.log(obj);   //to print out the left over 
        return true ;
    }else{
        return false;
    } 
}
const myObject = {
 name: "John Doe", 
 email:  "john@gmail.com", 
 phone_no: +234-802-894-7884, 
 cc_code: 123
} 
Let result = removeProperty(myObject,  'cc_code') ;
console.log(result);