path.to.obj
문자열을 통해 myobject[path][to][obj]
에 액세스하려면 어떻게해야합니까? 나는 'settingValue'
을 settingObj[path][to][setting]
으로 작성하는 함수 Settings.write('path.to.setting', 'settingValue')
을 호출하려고합니다. eval()
없이 어떻게해야합니까?도트 구문을 통한 액세스 개체
나는 아래의 사용자 중 한 명이 답변 한 것과 같은시기에 마침내 알아 냈습니다. 누군가가 관심을 가지면 어떻게 작동하는지에 대한 문서를 여기에 게시 할 것입니다.
(function(){
var o = {}, c = window.Configure = {};
c.write = function(p, d)
{
// Split the path to an array and assaign the object
// to a local variable
var ps = p.split('.'), co = o;
// Iterate over the paths, skipping the last one
for(var i = 0; i < ps.length - 1; i++)
{
// Grab the next path's value, creating an empty
// object if it does not exist
co = (co[ps[i]])? co[ps[i]] : co[ps[i]] = {};
}
// Assign the value to the object's last path
co[ps[ps.length - 1]] = d;
}
c.read = function(p)
{
var ps = p.split('.'), co = o;
for(var i = 0; i < ps.length; i++)
{
co = (co[ps[i]])? co[ps[i]] : co[ps[i]] = {};
}
return co;
}
})();
내가 문제가있는 이유는 마지막 경로를 건너 뛰어야하기 때문입니다. 마지막 경로를 포함하면 결국 임의의 객체를 할당하게됩니다.
그러나 경로에 정확히 얼마나 많은 부분이 있는지 정확히 알지 못합니다. 2 일 수도 있고, 6 일 수도 있습니다. – LordZardeck
제 잘못입니다. 나는 일종의 선재적 인 설정이라고 생각했습니다. 나는 코드를 여기에 넣었다 : http://jsfiddle.net/HVh7X/, 내가 편집을보기 전에 시작 했으니, 잠시 후에 나의 대답을 업데이트 할 것이다. – Rick
롤, 그래, 그냥 알아 냈어.마지막 경로를 건너 뛸 필요가있어서, 그냥 임의의 값을 지정했기 때문입니다. 답을 수정하자마자 받아 들일 것입니다. – LordZardeck