2016-08-11 4 views
1

私はオブジェクトの配列を持っています。オブジェクトのいずれかのプロパティから「undefined」を削除したいと思います。それはまた、オブジェクトの配列を受け入れ、それから「未定義」を削除することができますので、どのように私はこれを修正することができますか?オブジェクトの配列を見て、そのプロパティからundefinedを削除してください

removeNullorUndefined:function(model) { 
       function recursiveFix(o) { 
        // loop through each property in the provided value 
        for (var k in o) { 
         // make sure the value owns the key 
         if (o.hasOwnProperty(k)) { 
          if (o[k] === 'undefined') { 
           // if the value is undefined, set it to 'null' 
           o[k] = ''; 
          } else if (typeof (o[k]) !== 'string' && o[k].length > 0) { 
           // if there are sub-keys, make a recursive call 
           recursiveFix(o[k]); 
          } 
         } 
        } 
       } 

       var cloned = $.extend(true, {}, model); 
       recursiveFix(cloned); 
       return cloned; 

     }, 

、私はこの方法を使用して、オブジェクトから未定義削除するには

であれば値がundefinedとしない「未定義」の文字列値であるとして、次に一つの方法は、JSON.stringifyを使用することで、任意の入力

+1

は、それは 'あなたが文字列を使用していることを意図的です'undefined'の代わりに' undefined'を使用していますか? 'null''ではなく空文字列にも設定しています(これはまだ文字列で、引用符のない' null'と同じではありません)。 – 4castle

答えて

3

に感謝します。プロパティ値参照:

変換時に関数またはシンボルが見つからない場合は、オブジェクト内で見つかった場合は省略され、nullの場合はnullになります(配列内に見つかった場合) 。 JSON.stringify(function(){})やJSON.stringify(undefined)のような "純粋な"値を渡すときにJSON.stringifyは単に未定義を返すこともできます。

したがって、オブジェクトをストリング化してすぐに解析して、undefinedの値を削除することができます。

注::この方法は、オブジェクト全体を深くクローンします。言い換えれば、参照を維持する必要がある場合、このアプローチは機能しません。

var obj = { 
 
    foo: undefined, 
 
    bar: '' 
 
}; 
 
var cleanObj = JSON.parse(JSON.stringify(obj)); 
 

 
// For dispaly purposes only 
 
document.write(JSON.stringify(cleanObj, null, 2));

Anがボーナスは、それがどの深さで動作する特別なロジックなしでコメントを追加しました:それは 'は文字列値である場合

var obj = { 
 
    foo: { 
 
    far: true, 
 
    boo: undefined 
 
    }, 
 
    bar: '' 
 
}; 
 
var cleanObj = JSON.parse(JSON.stringify(obj)); 
 

 
// For dispaly purposes only 
 
document.write(JSON.stringify(cleanObj, null, 2));

定義されていません。同じアプローチを使用できますが、replacer機能:

var obj = { 
 
    foo: { 
 
    far: true, 
 
    boo: 'undefined' 
 
    }, 
 
    bar: '' 
 
}; 
 
var cleanObj = JSON.parse(JSON.stringify(obj, replacer)); 
 

 
function replacer(key, value) { 
 
    if (typeof value === 'string' && value === 'undefined') { 
 
    return undefined; 
 
    } 
 

 
    return value; 
 
} 
 

 
// For dispaly purposes only 
 
document.write(JSON.stringify(cleanObj, null, 2));

+0

'undefined'が実際に文字列だった場合、これは動作しません質問に。 – 4castle

+0

@ 4casteありがとう、そのビットを追加するのを忘れてしまった。今修正されました。 –

1

あなたが道removeNullorUndefinedを(好きなら)は現在、あなたは試してみてください動作します

items.forEach(function(item){ removeNullorUndefined(item); }); 
関連する問題