2017-09-23 85 views
-2

我通過json_decode從json url創建一個數組。我做了一些與各種嵌套數組的東西。我也想用所有嵌套數組的數據做一些事情。因此,我認爲將數組重新組合成一個(但現在不嵌套)並循環通過它會很方便。 concat作品完美。但是,當我嘗試在鍵/值上對新數組進行排序時,它出錯了,我知道爲什麼。一個或多個有時爲空的數組(動態數據源)。因此該陣列是例如;如何跳過數組如果在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); 

現在我想知道如何跳過concat()中的數組時,它是空的。

有沒有人有想法?

喜歡聽到你的消息。

問候,

範尼

+0

您可以檢查它是否是串聯前空的,使用'if' –

+0

怎麼樣'如果(someArray.length == 0 )'? – kamyl

+0

數組是否爲空(a.k.a中沒有元素)還是爲null? – nadavvadan

回答

0

你可以使用一個默認爲空數組concatination所有陣列。你不需要連鎖Array.concat,因爲你可以使用更多的數組作爲參數。

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

其他的解決方案可能是一個具有值的數組。

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 || []), []); 

測試用例爲空數組或默認陣列falsy值:

// 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 
相關問題