【问题标题】:Removing specific keys from an object从对象中删除特定键
【发布时间】:2017-06-22 08:22:19
【问题描述】:

给定一个元素数组,如 ["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}

对于任何阅读本文并可以帮助我的人,提前感谢您。

【问题讨论】:

    标签: javascript arrays function object key


    【解决方案1】:

    您的代码无法正常工作的原因是它正在比较属性的和属性的名称(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 引擎对属性查找所做的优化。当然,再说一遍,这通常没关系......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2016-03-21
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多