2017-06-05 9 views
1

新しい配列を既存の配列(100.000オブジェクトの大きな配列)から作成します。新しい配列では、 "city"の値がニューヨークのような要素だけが必要です。特定の値を含む要素のみで既存の配列を作成する

var newData = []; 

    for (var i = 0; i < data.length; i++) { 

     if(data[i].city === "New York City") { 

      newData[i] = {"city": data[i].city, "longitude": 
      data[i].longitude, "latitude": data[i].latitude, "state": 
      data[i].state}; 

     } 
    } 
私は新しい配列内の要素の多く以来、何か間違ったことしなければならない

は... nullある

新しい配列は、このようなものになります。

[null,null,null,null,null, {"city":"New York", "logitude": 
-73.935242, "latitude": 40.730610, "state": "NY"}, 
null,null,null,null,null,null,"city":"New York", "logitude": 
-73.935242, "latitude": 40.730610, "state": "NY"}] 

は私が間違って何をやっています?どうすれば目標を達成できますか?

ありがとうございました!

+1

なぜ 'filter'を使用しないのですか? – evolutionxbox

+0

@evolutionxbox:新しいオブジェクトを作成するように見えます。 –

+0

ifステートメント内でconsole.log(data [i])を使用して、オブジェクトのどの部分が出力されているかを確認できます。 null結果を除き、新しい配列に正しい結果がすべて含まれていますか? – WizardCoder

答えて

3

要素は、彼らは(あなたがそれらにアクセスしようとするとundefinedとして表示されます)行方不明だろう、nullではありません。理由は、エントリをスキップした場合でも、毎回iが増えているためです。それを修正するには

、代わりにpushを使用する:あなたは二つの配列をしたい

var newData = []; 

for (var i = 0; i < data.length; i++) { 

    if (data[i].city === "New York City") { 
     newData.push({ 
      "city": data[i].city, 
      "longitude": data[i].longitude, 
      "latitude": data[i].latitude, 
      "state": data[i].state 
     }); 
    } 
} 

場合共有にオブジェクトを、あなたの代わりにfilterを使用することもできます。

var newData = data.filter(function(entry) { 
    return entry.city === "New York City"; 
}); 

が、場合を新しい配列に元のオブジェクトとは異なる新しいオブジェクトを作成したい場合は、for loo pは大丈夫です。

+1

私はとても盲目です...ありがとう! –

1

あなたはArray.prototype.filterメソッドを使用することができます

newData.filter(function (el) { 
    return el.city === "New York City"; 
}); 

をしたり、他のフィルタパラメータが必要な場合:

newData.filter(function (el) { 
    return el.city === "New York City" && el.state === "NY" ; 
}); 

このメソッドは、新しいECMAScript 5th Edition standardの一部です。ドキュメントから

filter()は の各要素アレイに一度提供されるコールバック関数を呼び出し、 コールバックがtrueに強制変換値を返すためのすべての値の新しい配列を構築します。コールバックは、割り当てられた値を持つ配列のインデックスに対してのみ が呼び出されます。削除されたか、または 割り当てられた値に決して達していないインデックスに対しては、 は呼び出されません。コールバックテスト に合格しない配列要素は単にスキップされ、新しい配列には含まれません。

関連する問題