web-dev-qa-db-ja.com

配列から未定義の値を削除する

特定の状況では、配列構造にundefinedまたは一般的にfalsyの値があることがあります。たとえば、データベースやHTML構造などの不明なソースからデータを読み込んで入力する場合。好む

var data = [42, 21, undefined, 50, 40, undefined, 9]

そのような配列をループして要素を操作するときに問題が発生する可能性があるため、undefined(偽の値)を削除するベストプラクティスは何ですか?

28
jAndy

ここで_Array.prototype.filter_を使用するのは明らかです。したがって、未定義の値のみを削除するには、

_var data = [42, 21, undefined, 50, 40, undefined, 9];

data = data.filter(function( element ) {
   return element !== undefined;
});
_

偽の値(0やnullなど)をすべて除外する場合は、代わりに_return !!element;_を使用できます。

しかし、Booleanコンストラクター関数、またはNumberコンストラクター関数をそれぞれ_.filter_に渡すだけで、少しエレガントになります。

_data = data.filter( Number );
_

それはこのインスタンスで仕事をし、一般的にfalsy値を削除するために、

_data = data.filter( Boolean );
_

Boolean()コンストラクターはtruthyの値でtrueを、任意のfalsyの値でfalseを返すため、これは非常にきちんとしたオプション。

66
jAndy

ラムダを使用したインライン

result.filter(item => item);
48
raphaklaus

Lodash compactメソッドを使用して、nullundefined、および''を削除できます。

_.compact(data)
5
Akash Dathan

Array.prototype.reduce()は、配列から条件によって要素を削除するために使用できますが、1回の反復で必要に応じて要素の追加の変換を行います。


サブ配列をサポートして、配列からundefined値を削除します。

function transform(arr) {
    return arr.reduce((memo, item) => {
        if (typeof item !== "undefined") {
            if (Array.isArray(item)) item = transform(item);
            // We can transform item here.
            memo.Push(item);
        }
        return memo;
    }, []);
}

let test1 = [1, 2, "b", 0, {}, "", , " ", NaN, 3, undefined, null, 5, false, true, [1, true, 2, , undefined, 3, false, ''], 10];

console.log(transform(test1));

jsfiddle.net/bjoy4bcc/ で試してみてください

2
Bogdan Potishuk
var a =  ["3","", "6"];
var b =  [23,54,56];
var result = [];

for (var i=0;i<a.length;++i) {
    if (a[i] != "") {
        result[i] = b[i];
    }
}

result = result.filter(function( element ) {
   return element !== undefined;
});

console.log(result);
1
Jorge Londoño

var arr1 = [NaN、0、15、false、-22、 ''、undefined、47、null];

var array1 = arr1.filter(function(e){return e;});

document.write(array1);

単一行ans

0
vishal