2017-06-17 5 views
1

空の配列を削除する方法をlodash:Javascriptを/私はこのような構造で働いている

[ 
    [ 
     { 
     "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

* "この構造体" *:1つの構造体に対して有効な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

トップレベルの配列内のすべての項目が配列されているなら、あなたはisEmpty述語とのrejectをlodashことができます。

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

isEmptyあなたのトップレベルの配列がちょうど空の配列を削除するにはそのような項目を含めることができる場合は、あなただけの空の配列を返すために、新たな機能を構成していることを使用することができますので、他のものの中で、空のオブジェクトのtrueを返しますように

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

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

ありがとう!これは私のために働いたものです。 – Woppi

関連する問題