2017-09-23 7 views
-2

json URLからjson_decodeまでの配列を作成します。私は様々なネストされた配列でいくつかのものを行います。私はまた、すべてのネストされた配列からのデータでいくつかのことをしたい。したがって、配列を1つに再連結して(今は入れ子になっていない)、それをループすることは便利だと思いました。コンカットは完璧に動作します。しかし、キー/値で新しい配列をソートしようとすると、エラーが発生し、その理由を知ることができます。 1つ以上の配列が空の場合があります(動的データソース)。従って、アレイは、例えば;JavaScriptが空の場合、配列をスキップする方法

"various":null 

これは、スクリプト用のさまざまな変数を作成する方法です。

var data_hazards = data_all['alerts'][0]['hazards']; 
var data_various = data_all['alerts'][0]['various']; 
var data_standstill = data_all['alerts'][0]['standstill']; 
var data_roadclosed = data_all['alerts'][0]['roadclosed']; 
var data_accidents = data_all['alerts'][0]['accidents']; 
var data_police = data_all['alerts'][0]['police']; 
var data_construction = data_all['alerts'][0]['constructions']; 
var data_jams = data_all['alerts'][0]['jams']; 
//Concat the above arrays 
var data_total = data_hazards.concat(data_various).concat(data_standstill).concat(data_roadclosed).concat(data_accidents).concat(data_police).concat(data_construction).concat(data_jams); 

ここでは、配列が空の場合に配列をスキップする方法を知りたいと思います。

誰かがアイデアを持っていますか?

あなたからの声が好きです。

よろしく、

ルード

+0

それを連結する前に、空であるかどうかをチェックすることができ、 'どのように(someArray.length == 0であれば、'について –

+0

if'を使用して! ) '? – kamyl

+0

配列は空です(要素はありません)か、それとも 'null'ですか? – nadavvadan

答えて

0

あなたが連結のためにすべてのアレイをデフォルトの空の配列を使用することができます。 Array.concatをチェーンする必要はありません。なぜなら、より多くの配列をパラメータとして使用できるからです。

他の解決策は、値を持つ配列にすることができます。デフォルトの配列を持つ空の配列やfalsy値に対する

var data_total = [ 
     data_hazards, data_various, data_standstill, data_roadclosed, data_accidents, data_police, data_construction, data_jams 
    ].reduce((r, a) => r.concat(a || []), []); 

テストケース:

// concat empty array to an empty array 
 
console.log([].concat([]));   // [] 
 

 
// use default array if falsy value 
 
console.log([].concat(null || [])); // [] 
 

 
// concat a value to an empty array 
 
console.log([].concat(['foo'])); // ['foo']

+0

これは完璧に機能しました!ありがとう!先にソリューションを実装する時間がなかった。返事が遅くなってごめん。本当に助けていただきありがとうございます! – Ruudvddries

0

あなたのコード内の明白な繰り返しパターン、および重複のため、たくさんあります。私は、次はそれを修正し、同時にあなたの問題を解決するためにお勧め:

const data_total = 
    ['hazards', 'various', 'standstill', ...] 
    .map(key => data_all['alerts'][0][key]) // retrieve data for each key 
    .filter(data => data != null) // ignore those that are null 
    .reduce((a, b) => a.concat(b), []); // concat them all together 
関連する問題