2017-06-17 1663 views
1

我这种结构的工作:的JavaScript/lodash如何删除空数组

[ 
    [ 
     { 
     "comments":"asd", 
     "movement":"Back Squat", 
     "userID":"wDHZv3OL55SIymHkhMUejNleNkx1", 
     "weight":"330" 
     } 
    ], 
    [ 
     { 
     "comments":"asd", 
     "movement":"Bench Press", 
     "userID":"wDHZv3OL55SIymHkhMUejNleNkx1", 
     "weight":"100" 
     } 
    ], 
    [ 
     { 
     "comments":"Comment", 
     "movement":"Clean", 
     "userID":"wDHZv3OL55SIymHkhMUejNleNkx1", 
     "weight":"195" 
     } 
    ], 
    [ 

    ], 
    [ 

    ], 
    [ 
     { 
     "comments":"Front squat comment alpha", 
     "movement":"Front Squat", 
     "userID":"wDHZv3OL55SIymHkhMUejNleNkx1", 
     "weight":"315" 
     } 
    ], 
    [ 

    ], 
    [ 

    ], 
    [ 

    ], 
    [ 

    ], 
    [ 

    ], 
    [ 
     { 
     "comments":"abc", 
     "movement":"Strict Press", 
     "userID":"wDHZv3OL55SIymHkhMUejNleNkx1", 
     "weight":"155" 
     } 
    ] 
] 

这是我使用JSON格式的输入。正如你所看到的,有多个空阵列。

我将如何去通过这些数组进行过滤并删除空的?

+0

*“This structure”*:这对于单个结构来说是无效的JavaScript表示法。你能用JavaScript表示法提供输入和所需的输出吗? – trincot

+0

我已添加输入 –

+1

提供的答案将完成这项工作。你声称他们返回一个空数组很奇怪。如果这真的是JSON(即文本格式),那么当然你首先需要将它解析成一个真正的数组。 – trincot

回答

3

使用本地Array#filter或lodash的_.filter(),并保持子与其它长数组比0

Array#filter

var arrs = [[{"comments":"asd","movement":"Back Squat","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"330"}],[{"comments":"asd","movement":"Bench Press","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"100"}],[{"comments":"Comment","movement":"Clean","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"195"}],[],[],[{"comments":"Front squat comment alpha","movement":"Front Squat","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"315"}],[],[],[],[],[],[{"comments":"abc","movement":"Strict Press","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"155"}]]; 
 

 
var result = arrs.filter(function(sub) { 
 
    return sub.length; 
 
}); 
 

 
console.log(result);

Lodash的_.filter()

var arrs = [[{"comments":"asd","movement":"Back Squat","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"330"}],[{"comments":"asd","movement":"Bench Press","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"100"}],[{"comments":"Comment","movement":"Clean","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"195"}],[],[],[{"comments":"Front squat comment alpha","movement":"Front Squat","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"315"}],[],[],[],[],[],[{"comments":"abc","movement":"Strict Press","userID":"wDHZv3OL55SIymHkhMUejNleNkx1","weight":"155"}]]; 
 

 
var result = _.filter(arrs, function(sub) { 
 
    return sub.length; 
 
}); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+0

这是返回一个空数组作为结果。 –

+0

我已经添加了输入。请求出的只是删除所有的空数组。 –

+0

@JoeBerthelot - 使用您自己的数据(使用相同的格式)进行更新。正如你所看到的,它仍然有效。 –

0

测试以查看反过来每个阵列,如果它有一个非零(truthy)长度。如果有,请将其放入新阵列中。

var array_of_arrays = [[1], [1,1], [], [], [1]]; 
 
var array_of_non_empty_arrays = array_of_arrays.filter((array) => array.length); 
 
console.log(array_of_non_empty_arrays);

+0

这是返回一个空数组作为结果。 –

+0

你可以使用解构来缩短它'filter(({length})=> length)' –

+0

@JoeBerthelot - 它不在嵌入答案的现场演示中。由于您未能在问题中提供[mcve],所以我必须自己构建输入。 – Quentin

2

如果顶级阵列中的所有项目是数组,那么你可以lodash的rejectisEmpty谓语。

let result = _.reject(data, _.isEmpty); 

isEmpty也将返回除其他事情空物体真实的,所以如果您的顶层数组可以包含这些项目,然后只删除空数组,你可以组成一个新的功能,只返回空数组,并用其作为谓词来拒绝:

let isEmptyArray = item => _.isArray(item) && _.isEmpty(item); 

let result = _.reject(data, isEmptyArray); 
+0

谢谢!这对我来说很有用。 – Woppi