3

私は単純な配列を持っています:

var arr = ['has_cats', 'has_dogs'];

そしてオブジェクト:

var obj = new Object();

そして、配列からオブジェクト属性を設定したい:

for( i=0; i < arr.length; i++ ) {
        if(!arr.hasOwnProperty(arr[i])) {
                // set the object property
        }
}

ループした後obj.has_cats、私は呼び出すことができるはずですが、javascriptでそれを行う適切な方法を見つけることができないようです. Python では、setattr(obj,arr[i], value). オブジェクトに a がある場合、 aと ahasOwnPropertyもある必要があると考えました。getOwnPropertysetOwnProperty

ガイダンスはありますか?

4

5 に答える 5

3

"私は、オブジェクトが を持っている場合、それらhasOwnPropertygetOwnPropertyおよびsetOwnProperty

このhasOwnProperty()関数は、オブジェクトのプロトタイプ チェーンのどこかから継承されたプロパティと比較して、名前付きプロパティがオブジェクトの直接のプロパティとして存在するかどうかを示します。in演算子 (のようif (someProperty in someObject) {}に使用) は、オブジェクトがプロトタイプ チェーンのどこかにそのプロパティを持っているかどうかを示します。

setOwnProperty()次のように言うことができるため、対応する関数は必要ありません。

someObject[someProperty] = someValue;

指定されたプロパティが直接プロパティである場合にのみ値を返す関数が必要な場合、対応する関数の種類のアイデアはgetOwnProperty()理にかなっていると思いますが、指定されたプロパティが見つからなかったことを示す方法はありませんプロパティ見つかった場合、null、undefined、false などはすべて正当な潜在的な値であるためです。したがって、それを達成するには、 を使用して 2 段階のプロセスとして実行する必要がありますif (hasOwnProperty())

しかし、それはあなたがやろうとしていることのようには聞こえません。私があなたを正しく理解していれば、プロパティ名が変数(あなたの場合は配列要素)にあるプロパティを設定する方法が必要なだけです。これらのプロパティにどの値を関連付けたいか明確にしていないので、単に を使用しますtrue

var arr = ['has_cats', 'has_dogs'];

var obj = {}; // note {} is generally preferred to new Object();

for(var i=0; i < arr.length; i++ ) {
  // if the property doesn't already exist directly on
  // the object
  if(!obj.hasOwnProperty(arr[i])) {
     // set the object property
     obj[arr[i]] = true;
  }
}

// can access with bracket notation
alert(obj["has_cats"]);

// can access with dot notation
alert(obj.has_cats);
于 2011-08-03T03:39:29.777 に答える
2

値を追加することも、追加することもありませgetOwnPropertyん。setOwnProperty

以下は、 から評価されたオブジェクトのプロパティを常にx設定します。したがって、setOwnPropertyプロパティの割り当てにすぎません。

x[prop] = v

同様に、 と プロパティの存在の組み合わせを使用して、hasOwnProperty派生 (および置換) することができますgetOwnProperty

if (x.hasOwnProperty(prop)) {
   // x has prop
   // x[prop] may evaluate to undefined
} else if (prop in x) {
   // prop resolved through [[prototype]] chain
   // x[prop] may evaluate to undefined
} else {
   // property prop not set
   // x[prop] will evaluate to undefined
}

ハッピーコーディング。

于 2011-08-03T03:43:48.540 に答える
2

次の方法で値を設定できます。

for(i = 0; i < arr.length; i++ ) {
        if(!obj.hasOwnProperty(arr[i])) {
                obj[arr[i]] = 'value';
        }
}
于 2011-08-03T03:19:28.717 に答える
1

これをやや複雑にしすぎていると思います。これを試して:

var arr = ['has_cats', 'has_dogs'];
var obj = new Object();
for( i=0; i < arr.length; i++ ) {
    obj[arr[i]] = true;
}

hasOwnProperty配列をインデックスで反復する場合、配列に対して使用する必要はありません。おそらく、objすでに設定されているものを上書きしないようにチェックするつもりでしたか?

于 2011-08-03T03:20:37.180 に答える
0

プロパティは次の方法で設定できます。

obj[arr[i]] = "my value";

JavaScript では、プロパティへのアクセスは.nameまたはのいずれかで行うことができます['name']

于 2011-08-03T03:19:56.060 に答える