从对象中删除特定键

时间:2017-02-05 08:39:15

标签: javascript arrays function object key

给定一系列元素,如[" a"," r"," g"]和一个对象,我试图删除键/值对,其中键是数组的元素。



function shorten(arr, obj) {
  
  var keys = Object.keys(obj);          //make an array of the object's keys
  for(var i = 0; i < arr.length; i++)   //loop for original array (arr) 
      for(var j = 0; j < keys.length; j++)  //loop for "keys" array
          if(arr[i] === obj[keys[j]])           //check for array element matches
              delete obj[keys[j]];                  //delete the matches from object
  return obj;                           //return the new object
    
}

 var arrA = ['a','r', 'g'];
 var oB = {a: 4, u: 1, r: 2, h: 87, g: 4};
 console.log(shorten(arrA,oB))         //I keep getting the original object
                                       //The function isn't shortening things
&#13;
&#13;
&#13;

//desired output is:

{u: 1, h: 87}

任何读过此内容并且可以帮助我的人都会提前感谢你。

1 个答案:

答案 0 :(得分:7)

您的代码无法正常工作的原因是它将属性的与属性的名称(a与{{1}进行比较等等。)

假设您确实要删除数组中列出的属性,这就是您所说的但不是您想要的输出所暗示的内容,代码可以是很多更简单,因为4如果对象没有属性,则为无操作:

&#13;
&#13;
delete
&#13;
&#13;
&#13;

附注:它通常并不重要,但值得注意的是,在某些JavaScript引擎上的对象上使用function shorten(arr, obj) { arr.forEach(function(key) { delete obj[key]; }); return obj; } var arrA = ['a','r', 'g']; var oB = {a: 4, u: 1, r: 2, h: 87, g: 4}; console.log(shorten(arrA, oB));会使对该对象的后续属性查找操作变得更慢。引擎已经过优化,可以处理添加和更新的属性,但不会被删除。删除属性后,它会禁用某些JavaScript引擎在属性查找时执行的优化。当然,再一次,它通常并不重要......