如何在javascript中跳过空数组
我通过json_解码从json url创建了一个数组。我用各种嵌套数组做了一些工作。我还想对来自所有嵌套数组的数据做一些处理。因此,我认为再次将数组合并成一个数组(但现在不是嵌套的)并循环使用它会很方便。海螺工作得很好。但当我尝试按键/值对新数组排序时,它会出错,我知道原因。有时为空的一个或多个数组(动态数据源)。因此,例如,阵列是如何在javascript中跳过空数组,javascript,arrays,json,concat,Javascript,Arrays,Json,Concat,我通过json_解码从json url创建了一个数组。我用各种嵌套数组做了一些工作。我还想对来自所有嵌套数组的数据做一些处理。因此,我认为再次将数组合并成一个数组(但现在不是嵌套的)并循环使用它会很方便。海螺工作得很好。但当我尝试按键/值对新数组排序时,它会出错,我知道原因。有时为空的一个或多个数组(动态数据源)。因此,例如,阵列是 "various":null 这就是我如何为脚本创建各种变量的方法 var data_hazards = data_all['alerts'][0]['hazar
"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
?这非常有效!谢谢没有时间提前实施解决方案。很抱歉反应太晚。非常感谢你的帮助!