javascript - 从对象中删除特定键

标签 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

//desired output is:

{u: 1, h: 87}

任何阅读本文并能帮助我的人,在此先感谢您。

最佳答案

您的代码无法正常工作的原因是它正在比较属性的 与属性名称(a4 等) .)

假设您真的想删除数组中列出的属性,这是您所说的,而不是您想要的输出所暗示的,代码可以很多更简单,因为 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));


旁注:这通常无关紧要,但值得注意的是,在某些 JavaScript 引擎上对对象使用 delete 会使后续对该对象的属性查找操作慢得多。引擎经过优化以处理正在添加 和更新但未删除的属性。删除属性后,它会禁用某些 JavaScript 引擎对属性查找所做的优化。当然,再一次,这通常并不重要......

关于javascript - 从对象中删除特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42050065/

相关文章:

javascript - html FAQ 有序列表

Java - 将多个字符串转换为图像格式

arrays - 面试题 : Replacing two arrays's place in memory

javascript - Angular : service. setData 不是函数

javascript - angularjs:在表单验证期间忽略输入

javascript - 使 HTML 页面的元素在另一个 HTML 页面中可访问

javascript - polymer :显示对话框

JavaScript : Expected and assignment or function call and instead saw an expression

javascript - 调用由 key 标识的异步函数

function - go 的 len() 和 make() 函数是如何工作的?