4

objectキーへの「パス」を定義することは可能ですか?

たとえば、object:がある場合

var obj = {
    hello: {
        you: "you"
    }
}

私はそれをこのように選択したいと思います:

var path = "hello.you";
obj[path]; //Should return "you"

(明らかに機能しませんが、方法はありますか?)

4

3 に答える 3

4

クイックコード、おそらくエラープルーフにする必要があります;-)

var obj = {
    hello: {
        you: "you"
    }
};

Object.prototype.getByPath = function (key) {
  var keys = key.split('.'),
      obj = this;

  for (var i = 0; i < keys.length; i++) {
      obj = obj[keys[i]];
  }

  return obj;
};

console.log(obj.getByPath('hello.you'));

そしてここであなたはテストすることができます-> http://jsbin.com/ehayav/2/

mz

于 2013-03-13T09:47:49.463 に答える
4

あなたはこれを試すことができます:

var path = "hello.you";
eval("obj."+path);
于 2013-03-13T09:48:37.700 に答える
1

それはできませんが、ネストされたオブジェクトをトラバースする関数を作成できます

function get(object, path) {
   path = path.split('.');
   var step;
   while (step = path.shift()) {
       object = object[step];
   }
   return object;
}

get(obj, 'hello.you');
于 2013-03-13T09:47:40.537 に答える