0

次のようなオブジェクトがあります。

var theObject = { 
    keyName1: { keyName2: value2, keyName3: value3, keyName4: value40 },
    ...,
    keyName10: { keyName2: value6, keyName3: value7, keyName4: value8 }
}

theObject["keyName10"]["keyName3"]orで value7 を参照できることはわかっていtheObject.keyName10.keyName3 ますが、変数を検索パスのようなものに設定し、何らかの方法でそれを渡してtheObjectvalue7 を直接取得する必要があります。

何かのようなもの:

var path = keyName10.keyName3;
var myValue = theObject(path);

オブジェクトは、オブジェクトの開始にさらに深く入り込むことができます。現在、私は恐ろしい見た目の for ループで解決しています。私が逃したより良い方法はありますか?

4

2 に答える 2

1

楽しみのためにソリューションを追加しようとしています。私は間違いなくこのように使用しませんが、アイデアはあなたの状況でうまくいくかもしれません. 私はまた、このアプローチの効率性にも疑問を投げかけています。

var theObject = { 
    keyName1: { keyName2: value2, keyName3: value3, keyName4: value40 },
    ...,
    keyName10: { keyName2: value6, keyName3: value7, keyName4: value8 }
}
var path = 'keyName10/keyName3';


function getProp(theObject, path){
    var parts = path.split("/"),
    idx = parts[0],
    newParts = parts.splice(0, 1),
    newPath = newParts.join("/"),
    obj = theObject[idx];

    // add some validation and error handling in case or error on path 
    // or missing property on obj


    // I do not like the line below, would need to find a better way to see
    // if the function return something or it does some recursion
    // need to figure the right condition to see if we are at des
    if(parts.length == 1) {
        return obj;
    } else {
       return getProp(obj, newPath);
    }
}

役立つかもしれません: JavaScript でオブジェクトにプロパティがあるかどうかを確認するにはどうすればよいですか?

于 2013-03-07T12:09:06.097 に答える
0

ゲッター関数を作成してみませんか...

var path = 'keyName10/keyName3'

function getTheThing(key){
    var parts = key.split("/")
    return theObject[parts[0]][parts[1]]
}

var myValue = getTheThing(path)

オブジェクトとキーをゲッターに渡して、パスを使用してさまざまなオブジェクトにアクセスできるようにすることで、より一般的にすることができます...

var path = 'keyName10/keyName3'

function getTheThing(key, obj){
    var parts = key.split("/")
    return obj[parts[0]][parts[1]]
}

var myValue = getTheThing(path,theObject)
于 2013-03-06T22:51:15.960 に答える