2012-01-19 12 views
58

私はjavascriptオブジェクトを持っている(私は実際にAJAXリクエストを介してデータを取得する):JavaScriptオブジェクトプッシュ()関数

var data = {}; 

は、私はそれにいくつかのものを追加しました:

data[0] = { "ID": "1"; "Status": "Valid" } 
data[1] = { "ID": "2"; "Status": "Invalid" } 

を今私は無効なステータスを持つすべてのオブジェクトを削除する(ただし、順序は同じすべてを保つ)したい:

私の心の中で
var tempData = {}; 
for (var index in data) { 
    if (data[index].Status == "Valid") { 
     tempData.push(data); 
    } 
} 
data = tempData; 

、この寿のすべて私はtempData.pushが関数ではないというエラーが発生しています。なぜアレイと同じではないのか理解していますが、どうすればいいですか?

+4

あなたはちょうど配列 – Esailija

答えて

90

push() is for arraysではなく、objectsです。正しいデータ構造を使用してください。

var data = []; 
// ... 
data[0] = { "ID": "1", "Status": "Valid" }; 
data[1] = { "ID": "2", "Status": "Invalid" }; 
// ... 
var tempData = []; 
for (var index=0; index<data.length; index++) { 
    if (data[index].Status == "Valid") { 
     tempData.push(data); 
    } 
} 
data = tempData; 
+9

の+1私にそれを打つ必要がありますように見えます。 'for ... in'ループも忘れずに変更してください。 –

+0

@MattBall私の悪い!私はSOのレビューやもので本当に熟達していません! :) – Shouvik

+0

プッシュは配列用です。オブジェクトに配列を追加する方法はありますか? – Venkat

3

あなたはvar tempData = new Array();

プッシュは配列関数であることを確認しなければなりません。

+7

'[]'ではなく '新しいArray()'を使うのはなぜですか? –

+2

[]は新しい配列を作成する代替(ショートカット)です。 []と新しいArray()で作ることができます。 –

+5

'[]'は配列を作成する主な方法であり、もう一つは選択肢であり、上書きすることもできます。 – Esailija

0

の操作を行います。

 

var data = new Array(); 
var tempData = new Array(); 
 
+4

'[]'ではなく 'new Array –

+2

それは、[]にすることができなかったことを意味しませんでした... –

+0

新しいArray();新しい配列;あなたは代替案について話す代わりに、そのような質問に答えることができます。 –

0
tempData.push(data[index]); 

私はあなたがまだあなたがTempDataをに追加するデータのインデックス値を与えていない....上記正解に同意、しかし。 [index]値がなければ配列全体が追加されます。私は、これはそのステータスがある場合、オブジェクトを削除するとより簡単だと思う

+0

問題の解決方法を詳しく記述してください。ありがとう。 –

+0

これは、Matt Ballから受け入れられた回答を修正することです。データをループしている間は、データではなくデータ[インデックス]のみをプッシュする必要があります。 –

7

オブジェクトは、プッシュプロパティをサポートしていませんが、あなたはキーとしてインデックスを使用して同様にそれを保存することができ、

var tempData = {}; 
 
for (var index in data) { 
 
    if (data[index].Status == "Valid") { 
 
    tempData[index] = data; 
 
    } 
 
} 
 
data = tempData;

無効にして、行う。

for(var index in data){ 
 
    if(data[index].Status == "Invalid"){ 
 
    delete data[index]; 
 
    } 
 
}

そして最後に、あなたがVARの一時を作成する必要はありません - あなたは、これらのコードで簡単に行うことができますので

+0

この回答が現在の問題を修正する際にOPをどのように助けてくれるのか、いくつかの説明を追加してください。 –

+0

@ρяσѕρєяK完了。 –

3

JavaScriptプログラミング言語は関数型プログラミングのパラダイムをサポートしています。

var data = [ 
    {"Id": "1", "Status": "Valid"}, 
    {"Id": "2", "Status": "Invalid"} 
]; 
var isValid = function(data){ 
    return data.Status === "Valid"; 
}; 
var valids = data.filter(isValid);