从对象中删除特定键

Dab*_*obi 1 javascript arrays key function object

给定一系列元素,如["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
Run Code Online (Sandbox Code Playgroud)

//desired output is:

{u: 1, h: 87}
Run Code Online (Sandbox Code Playgroud)

对任何阅读此内容并可以帮助我的人,请提前感谢您.

T.J*_*der 7

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

假设你真的要删除的磁盘阵列,这是你说的什么,但不是你所期望的输出有什么所列性能的代码可以是很多简单,因为delete是无操作如果对象不具有这样的性质:

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));
Run Code Online (Sandbox Code Playgroud)


旁注:通常无关紧要,但值得注意的是,delete在某些JavaScript引擎上使用对象会使对该对象的后续属性查找操作变得更慢.引擎已经过优化,可以处理添加和更新的属性,但不会被删除.删除属性后,它会禁用某些JavaScript引擎在属性查找时执行的优化.当然,再次,它通常无关紧要......