如何在javascript中跳过空数组

如何在javascript中跳过空数组,javascript,arrays,json,concat,Javascript,Arrays,Json,Concat,我通过json_解码从json url创建了一个数组。我用各种嵌套数组做了一些工作。我还想对来自所有嵌套数组的数据做一些处理。因此,我认为再次将数组合并成一个数组(但现在不是嵌套的)并循环使用它会很方便。海螺工作得很好。但当我尝试按键/值对新数组排序时,它会出错,我知道原因。有时为空的一个或多个数组(动态数据源)。因此,例如,阵列是 "various":null 这就是我如何为脚本创建各种变量的方法 var data_hazards = data_all['alerts'][0]['hazar

我通过json_解码从json url创建了一个数组。我用各种嵌套数组做了一些工作。我还想对来自所有嵌套数组的数据做一些处理。因此,我认为再次将数组合并成一个数组(但现在不是嵌套的)并循环使用它会很方便。海螺工作得很好。但当我尝试按键/值对新数组排序时,它会出错,我知道原因。有时为空的一个或多个数组(动态数据源)。因此,例如,阵列是

"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()中的数组为空时如何跳过它

有人有主意吗

很高兴收到你的来信

问候,


Ruud

可以使用默认的空数组表示所有数组。您不需要链接,因为您可以使用更多数组作为参数

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值的测试用例:

//将空数组转换为空数组
console.log([].concat([]);//[]
//如果为falsy值,则使用默认数组
console.log([].concat(null | |[]));//[]
//将值转换为空数组

console.log([].concat(['foo']);//['foo']
代码中存在明显的重复模式,因此存在大量重复。我建议采用以下方法解决此问题,同时解决您的问题:

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

在连接它之前,您可以使用
if
if(someArray.length!==0)检查它是否为空?数组是否为空(也就是说,数组中没有元素)或者它是否为
null
?这非常有效!谢谢没有时间提前实施解决方案。很抱歉反应太晚。非常感谢你的帮助!