2

私はこのようなオブジェクトを持っています:

var myObj = {
    first: {
        sub: {
            level: "some text",
            level2: "some more text"
        },
        sub2: {
            level3: "Something"
        }
    },
    second: {
        stuff: "More stuff...lots of stuff"
    }
}

私がしたいのは言うことです

delete myObj.first.sub.level

しかし、何が渡されているのか、正しいプロパティを削除するために何レベル深くする必要があるのか​​わかりません。つまり、次のようになります。

Storage.removeItem('myObj.first'); // This is currently working

またはもっと複雑なもの:

Storage.removeItem('myObj.first.sub2.level3'); // This doesn't work because I'm more than 1 level into the object.

キー「level3」とそのプロパティ「Something」を取得できるようになったので、ちょっと行き詰まりましたが、のセクション全体を削除するために正しくバックステップする方法がわかりません。そのオブジェクト。

渡されたオブジェクト全体を削除できるように、myObj内の場所を複製する必要があります。

'myObj.first.sub.level3'

それが理にかなっているなら...

4

1 に答える 1

9

きれいではありませんが、次のようなものを使用できます。

function deepDelete(target, context) {
  // Assume global scope if none provided.
  context = context || window;

  var targets = target.split('.');

  if (targets.length > 1)
    deepDelete(targets.slice(1).join('.'), context[targets[0]]);
  else
    delete context[target];
}

deepDelete('first.sub.level3', myObj);

deepDelete('myObj.first.sub2.level3');

typeof context[targets[0]] !== 'undefined'下降する前にテストするように変更することをお勧めします。それにどの程度正確に反応するか(falseを返す、スローするなど)は、それをどのように使用しているかによって異なります。

于 2011-02-20T21:45:38.507 に答える