8

python webutil/util.py -> trim_nulls メソッドの機能と同様に、JSON オブジェクトから null/空の要素を削除しようとしています。私が使用できるNodeに組み込まれているものはありますか、それともカスタムメソッドですか?

例:

var foo = {a: "val", b: null, c: { a: "child val", b: "sample", c: {}, d: 123 } };

期待される結果:

foo = {a: "val", c: { a: "child val", b: "sample", d: 123 } };
4

6 に答える 6

5

なぜ人々が私の最初の答えに賛成したのか分かりません、それは間違っていました(私がしたように、彼らはあまりにも速く見えたと思います)。とにかく、私はノードに精通していないので、これに何かが含まれているかどうかはわかりませんが、ストレートJSでそれを行うには次のようなものが必要だと思います。

var remove_empty = function ( target ) {

  Object.keys( target ).map( function ( key ) {

    if ( target[ key ] instanceof Object ) {

      if ( ! Object.keys( target[ key ] ).length && typeof target[ key ].getMonth !== 'function') {

        delete target[ key ];

      }

      else {

        remove_empty( target[ key ] );

      }

    }

    else if ( target[ key ] === null ) {

      delete target[ key ];

    }

  } );


  return target;

};

remove_empty( foo );

私は配列を使ってこれを試しませんでしたfoo-それを別の方法で処理するには追加のロジックが必要になるかもしれません。

于 2012-08-08T23:38:18.010 に答える
3

すべての助けをありがとう.. foo で動作するすべてのコメントのフィードバックを使用して、次のコードをつなぎ合わせました。

function trim_nulls(data) {
  var y;
  for (var x in data) {
    y = data[x];
    if (y==="null" || y===null || y==="" || typeof y === "undefined" || (y instanceof Object && Object.keys(y).length == 0)) {
      delete data[x];
    }
    if (y instanceof Object) y = trim_nulls(y);
  }
  return data;
}
于 2012-08-09T00:47:05.090 に答える
1

ループでフィルタリングしてfor、新しいきれいなオブジェクトに出力するだけです。

var cleanFoo = {};
for (var i in foo) {
  if (foo[i] !== null) {
    cleanFoo[i] = foo[i];
  }
}

子オブジェクトも処理する必要がある場合は、再帰が必要になります。

于 2012-08-08T23:43:30.397 に答える