0

これが私がしなければならないことです。私は行くオブジェクトを持っています

{"MainASubB":"AB","MainBSubC":"BC"...}

時々、MainA を開始する新しい属性を配置する前に、MainA を開始するすべての属性を取り出す必要があります。上記の例では、オブジェクトの変換は次のようになります。

{"MainASubB":"AB","MainBSubC":"BC"...} =>
{"MainBSubC":"BC"...} => //MainASubB has now been taken out
{"MainASubD":"AB","MainBSubC":"BC"...};  A new MainA group attribute, MainASubD has now been added.

私はJavascriptの削除ができることを知っていますが、それだけではそこまで行くとは思いません。私はそれを言及する必要があります

  1. そもそも MainA グループ属性が存在しない場合もあります。
  2. コードが意図したとおりに機能する場合、複数の MainA グループ属性が存在することはありません。

オブジェクトを文字列化して、必要に応じて文字列を消去してから、文字列を解除して、最後に新しい MainA グループ属性を挿入することは確かに可能ですが、おそらく jQuery に依存する別のテクニックがあるかどうか疑問に思っています。より速く。

4

2 に答える 2

3

プロパティを反復処理し、各名前を比較してからプロパティを比較する必要がdeleteあります。

for (var prop in obj) {
    if (prop.indexOf('MainA') === 0) { // property name starts with 'MainA'
        delete obj[prop];
        break; // since there can be only one
    }
}

ただし、そのような「階層的な」プロパティ名は使用しません。ネストされたオブジェクトを使用して、必要に応じて値を上書きしないのはなぜですか?

例えば:

var obj = {
    MainA: {
       SubA: '...'
    },
    MainB: {
       SubA: '...'
    }
};

そして、それはただです:

obj.MainA = {SubD: '...'};

または単に「サブ」値を追加します。

obj.MainA.SubD = '...';

これは、長期的にはより柔軟になります。

于 2013-06-04T13:15:06.453 に答える
1

一般的な関数は次のとおりです。

function removeProperties (obj, prop) {
  Object.keys (obj).forEach (
    function (p) {
      if (typeof prop === 'string' ? p.indexOf (prop) == 0 : prop.test (p)) 
        delete obj[p]; 
  });
  return obj;
}

パラメータobjは、プロパティを削除するオブジェクトです。たとえば、パラメーターpropは文字列にすることができます。'MainA'この場合、その文字列で始まる名前を持つプロパティはすべて削除されます。が正規表現の場合'prop、名前が一致するプロパティはすべて削除されます。

削除はその場で行われます。つまりobj、それ自体が変更され、関数の結果としても返されます。

ここで実際にそれを見てください:http://jsfiddle.net/jstoolsmith/EpSxC/

于 2013-06-04T13:56:15.100 に答える