2017-02-05 6 views
1

["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} 

、事前にあなたに感謝。

答えて

5

あなたのコードは、それはあなたが本当に配列にリストされているプロパティを削除すると仮定すると、プロパティの名前(4aなど)

でプロパティの値を比較していますされて機能していない理由、ご希望の出力が示唆オブジェクトは、プロパティを持っていない場合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エンジンが行う最適化が無効になります。もちろん、再び、それは通常問題ではありません...

関連する問題