2017-12-11 1 views
0

内のこのオブジェクトを配列要素を削除します。はJavaScript:オブジェクト

var Betreiber = { 
     "user1": [ 
     { 
      "desc": "60", 
      "Id": 3473631702, 
      "Status": "offline" 
     }, 
     { 
      "desc": "61", 
      "Id": 3473631703, 
      "Status": "offline" 
     } 

     ], 
     "user2": [ 
     { 
      "desc": "62", 
      "Id": 963346121, 
      "Status": "offline" 
     }, 
     { 
      "desc": "63", 
      "Id": 963346122,  
      "Status": "offline" 
     } 
     ], 
     "user3": [ 
     { 
      "desc": "64", 
      "Id": 972878784 
     }, 
     { 
      "desc": "65", 
      "Id": 3473631706, 
      "Status": "offline" 
     } 
     ] 
    } 

マイコード:

var anlagen = [963346121, 963346122]; 

for(var users in Betreiber) { 
    for(var k=0;k<anlagen.length; k++) { 
    for(var ids in Betreiber[users]) { 
     if(anlagen[k] != Betreiber[users][ids].Id){ 
     delete Betreiber[users][ids]; 
     } 
    } 
    } 
    if(Betreiber[users].length === 0) { 
    delete Betreiber[users]; 
    } 
} 

を私は私のanlagen配列に適合しないすべての要素を削除/スプライスします。 何らかの理由で、要素は削除されますが、完全には削除されません。

例については

:私はUSER1の値を保持する場合:

州:user1: [ , ], user2: [ , ], user3: [ , ]

が希望:user1: [data....]

user.lengthが0の場合、私は削除するwan'tユーザー全体。

+0

私は既にスプライスとメソッドを削除しようとしましたが、私はforループのためにそれを動作させることができません。 – tipsfedora

+0

[フィルタ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)をクリックし、保存したい項目を取得するのはなぜですか? – Thomas

答えて

1

私は、これはあなたが欲しいものだと思う:

var Betreiber = { 
 
    "user1": [{ 
 
     "desc": "60", 
 
     "Id": 3473631702, 
 
     "Status": "offline" 
 
    }, 
 
    { 
 
     "desc": "61", 
 
     "Id": 3473631703, 
 
     "Status": "offline" 
 
    } 
 

 
    ], 
 
    "user2": [{ 
 
     "desc": "62", 
 
     "Id": 963346121, 
 
     "Status": "offline" 
 
    }, 
 
    { 
 
     "desc": "63", 
 
     "Id": 963346122, 
 
     "Status": "offline" 
 
    } 
 
    ], 
 
    "user3": [{ 
 
     "desc": "64", 
 
     "Id": 972878784 
 
    }, 
 
    { 
 
     "desc": "65", 
 
     "Id": 3473631706, 
 
     "Status": "offline" 
 
    } 
 
    ] 
 
}; 
 

 
var anlagen = [963346121, 963346122]; 
 

 
Object.keys(Betreiber).forEach(key => { 
 
    Betreiber[key] = Betreiber[key].filter(item => { 
 
    return anlagen.indexOf(item.Id) !== -1; 
 
    }); 
 
    
 
    if(!Betreiber[key].length) { 
 
    delete Betreiber[key]; 
 
    } 
 
}); 
 

 
console.log(Betreiber);

あなただけArray#filterを使用して、あなたの基準を満たさない要素アウトを絞り込むことができます。結果の配列の長さが0の場合は、そのキーをオブジェクトから削除できます。

+0

'if(Betreiber [key] .length == 0)を追加する{ 削除Betreiber [key]; } 'は完璧に動作します、ありがとうございます。 – tipsfedora

+1

@tipsfedora - ちょうどそれのためのコードで私の答えを更新しました。 – 31piy

1
var anlagen = [963346121, 963346122]; 

for(var user in Betreiber) { 
    for (var k = 0, len = anlagen.length; k < len; k++) { 
    for (var j = 0, _len = Betreiber[user].length; j < _len; j++) { 
    if (anlagen[k] != Betreiber[user][j].Id) { 
     Betreiber[user].splice(j, 1); 
    } 
    } 
    } 
    if (Betreiber[user].length === 0) { 
    delete Betreiber[user]; 
    } 
} 
関連する問題