5
var obj = { key: value1, key: value2}

私はそれを繰り返して、(キーと値1)と(キーと値2)のパースを取得したいと思います

単純なサイクルを使用する場合:

for (var i in obj){
 console.log(obj[i])
}

私が得た: key value2 key value2

そのため、obj[i] は常に最後のキーを取得します

4

2 に答える 2

18

JS オブジェクトのキーは一意である必要があります。

何が起こるかは次のとおりです。

var obj = {
    key : value1
}

に設定obj['key']value1ます。

その後の の宣言は、前の宣言をkey : value2 上書きします。


問題の可能な解決策:

var obj = {
    key : [value1, value2]
}

for (var i in obj)
{
    if (obj[i] instanceof Array)
    {
        for (var k; k < obj[i].length; k++)
        {
            console.log(obj[i][k])
        }
    }
    else
    {
        console.log(obj[i]);
    }
}

別の、おそらくより洗練された解決策は、データの保存方法を次のように変更することです。

var obj = [
    { key : 'SomeKey'     , value : 'foo' },
    { key : 'SomeKey'     , value : 'bar' },
    { key : 'SomeOtherKey', value : 'baz' }
];

これにより、同じキーを持つ複数のエントリが明らかに許可されます。クエリは、次の行に沿ってどこかで実行できます。

values = [];
for (var i = 0; i < obj.length; i++)
{
    if (obj[i].key === 'SomeKey')
    {
        values.push(obj[i].value);
    }
}

console.log(values);
于 2012-09-24T08:43:06.270 に答える
3

これは不可能です。宣言のように:

var obj = { key: value1, key: value2}

最初に obj.key は として設定されvalue1、2 番目の代入value1では で書き換えられます。value2したがって、obj.key は現在value2です。
したがって、初期値にアクセスできません。

于 2012-09-24T08:45:15.857 に答える