1

for ループでデータ オブジェクトの値を設定する際に問題が発生しています。

// data object
var data = {
  title: '',
  x: {
    something: 'test',
    someVar: ''
  },
  y : {
    something: '',
    someVar: ''
  },
  dots: []
}

たとえば、 data.x.something = "tested"; を設定 (または更新) したいです。console.log を実行して、更新された値がテスト済みであることを確認できます。ただし、私の for ループではエラーが発生します。

    for(var i = 0, len = data.length; i < len; i++) {
      data.x.something = "x";
      console.log('data.x.something', data.x.something);
      // log says "Uncaught TypeError: Cannot set property 'something' of undefined". How come I can't set the var inside my for loop? 
    }

助言がありますか?ありがとう。

4

1 に答える 1

0

以下のコードでのjsFiddleの作業はこちらです

まず、データ オブジェクトの設計が不十分です。それを繰り返したい場合は、同じ型の x 個のオブジェクトを保持することを意味します。

 var data = [
    {// first object with the properties.
      title: '',
      x: {
        something: 'test',
        someVar: ''
      },
      y : {
        something: '',
        someVar: ''
      },
      dots: []
    }, {// second object with same properties
      title: '',
      x: {
        something: 'test2',
        someVar: ''
      },
      y : {
        something: '',
        someVar: ''
      },
      dots: []
    }
];

第二に、それはオブジェクトを反復処理する方法ではありません。これは、JavaScript オブジェクトには length プロパティがなく、オブジェクトを反復処理する適切な方法ではないためです。タイプ k の n 個のオブジェクト (特定のプロパティ セットを持つ) を保持するコレクションが必要な場合は、配列を使用します。それ以外の場合は、さらに無駄なネストが必要になります。JS の配列とオブジェクトに関するこの質問に対する私の回答を参照してください。

    for (var i = 0, len = data.length; i < len; i++) {
        data[i].x.something = "x";
        console.log(data[i].x.something);
    };
于 2013-03-13T14:20:17.597 に答える