2017-07-01 23 views
1

こんにちは、すべてJavaScriptの新機能であり、この問題に関するいくつかの助けが大好きです。基本的に私がしようとしているのは、配列から単一のオブジェクトを削除することです。配列には次のようなオブジェクトが含まれています。y = [{id:group}].可変プロパティ値を使用してjavascript配列からオブジェクトを削除

最初の列であるオブジェクトのIDを使用してオブジェクトを削除します。

私が試みたのは、対応するIDを見つけて削除するために配列をループすることですが、ここでの問題は、最初の列が "id"とラベル付けされていないことです。 。

ご協力いただければ幸いです。

y = [{123:1},{321:2},{234:3}] 
id = 123; 

    for (var i = 0; i < y.length; i++) 
    if (y[i].id === id) { 
     y.splice(i,1); 
    } 
//Does not work because the first column of the object is not named "id" 
+1

ダイナミックプロパティ名は素晴らしいですが、あなたはしないでください。より有用なオブジェクト構造は '{id:123、group:1}' – James

+0

@Jamesです。あなたのアドバイスを受け取り、私のオブジェクト構造を作り直すことにしました。ここのソリューションはもう機能しませんが、配列の操作が簡単になりました。ありがとう! – user3702643

答えて

2

ちょうどその特定のキーをチェック:

for (var i = 0; i < y.length; i++) 
    if (key in y[i]) { 
    y.splice(i,1); 
    } 
} 
+0

フィルタメソッドがより洗練されているように見えても、パフォーマンスは向上し、より意味がわかりましたので、最後にループメソッドを使用しました。ありがとう! – user3702643

4

あなたが代わりにループのfilterを使用することができます。

var y = [{123:1},{321:2},{234:3}] 
 
var id = 123; 
 

 
y = y.filter((obj) => !obj.hasOwnProperty(id)); 
 

 
console.log(y);

+0

ありがとう!これは本当にうまくいった。ループを使用する場合と比較して、フィルタを使用する利点は何ですか? – user3702643

+0

@user 3702643その構文的な砂糖。ループを使用する方が高速ですし、配列を地面から再作成しません。 –

+0

パフォーマンスはほぼ同じで、コードは読みやすくなります。もう1つの利点は、フィルタリングされた配列を別の変数に割り当てることができるので、副作用を伴わないので、その機能的な側面です –

1

私は2つの引数を使用して関数を作ります(配列、オブジェクトのキー) 配列内のforEachメソッドを使用すると、指定されたキー(引数を介して)がオブジェクト要素の存在するキーと比較され、比較されます。trueの場合、スプライス()メソッドを使用してキーを含むオブジェクトを削除します。

あなたは、彼らがあることを行っているものを知っていれば

y = [{123:1},{321:2},{234:3}]; 
 

 
function deleteObj(arg,value){ 
 
    arg.forEach(function(element){  
 
    var index=arg.indexOf(element);  
 
    if(Object.keys(element)==value.toString()){ 
 
     arg.splice(index,1); 
 
    } 
 
    }); 
 
} 
 
deleteObj(y,123); 
 

 
console.log(y);

+0

代替方法に感謝します! – user3702643

関連する問題