1

私は次の配列を持っています

var testArray = ["test1", "test2", "test3"];

obj他のオブジェクトが含まれている

var obj.test1.test2.test3 = "test";

testArrayをforeachしたい

そして、以下を取得します

obj[testArray[0]][testArray[1]][testArray[2]]

またobj["test1"]["test2"]["test3"]

これは「テスト」と等しく、obj.test1.test2.test3「テスト」を返します

4

3 に答える 3

2

ご存知のとおり、このobj["test1"]表記を利用して、ターゲットオブジェクトの奥深くにネストすることができます。この場合、各反復で、最後の反復の子になるようにポイントしているものの「トップ」を再割り当てします。

var obj = { test1: { test2: {test3: 'test' }}};
var current = obj;

var arr = ['test1', 'test2', 'test3'];
for(var i = 0; i < arr.length; i++){
    if(current === undefined){ break; }
    current = current[arr[i]];
}

console.log(current);
于 2013-03-27T12:36:27.713 に答える
0

これはどう:

var testArray = ["test1", "test2", "test3"];
var value = [obj].concat(testArray).reduce(function(prev, curr) {
     return prev[curr];
});

ただしreduce、IE <= 8(Reduce reference)ではサポートされていないことに注意してください。

于 2013-03-27T12:38:35.090 に答える
0
function extractDeep(obj, propPathArr) {
   var prop = obj;
   propPathArr.forEach(function (item) {
      prop = prop[item];
   });
   return prop;
}

次のように呼び出します:

alert(extractDeep({a: {b: {c: "The property!"}}}, ['a', 'b', 'c']));

ノート:

  • 本当にエラーチェックを追加する必要があります。
  • forEachすべてのブラウザで機能するわけではありません

jsFiddleはここにあります

于 2013-03-27T12:42:06.333 に答える