자바 스크립트 : 객체에 경로를 문자열로 전달하여 객체에서 깊은 값을 가져옵니다.
중복 가능성 :
문자열 키로 중첩 된 JavaScript 객체에 액세스
제목이 명확하지 않을 수도 있고, 원하는 것을 지정하는 방법을 몰랐고 제 영어가 정말 나쁩니다. 죄송합니다.
개체 값을 반환하는 함수를 만들려고 노력하고 있지만 중첩 된 개체에서도 잘 작동합니다. 예를 들면 :
var obj = {
foo: { bar: 'baz' }
};
함수에 "foo.bar"문자열을 제공하여 obj.foo.bar의 값에 액세스하고 싶습니다.
function(obj, path) {
// Path can be "foo.bar", or just "foo".
}
감사!
이걸 고려하세요:
var obj = {
foo: { bar: 'baz' }
};
function deepFind(obj, path) {
var paths = path.split('.')
, current = obj
, i;
for (i = 0; i < paths.length; ++i) {
if (current[paths[i]] == undefined) {
return undefined;
} else {
current = current[paths[i]];
}
}
return current;
}
console.log(deepFind(obj, 'foo.bar'))
이것은 올바르게 작동합니다.
var deep_value = function(obj, path){
for (var i=0, path=path.split('.'), len=path.length; i<len; i++){
obj = obj[path[i]];
};
return obj;
};
증명 / 데모 : jsfiddle.net/tadeck/5Pt2q/13/
편집 : 중복 변수를 제거하고 코드를 단축했습니다.
이런 뜻인가요? 재귀 버전입니다.
function recLookup(obj, path) {
parts = path.split(".");
if (parts.length==1){
return obj[parts[0]];
}
return recLookup(obj[parts[0]], parts.slice(1).join("."));
}
같은 것 :
function(obj, path) {
var current=obj;
path.split('.').forEach(function(p){ current = current[p]; });
return current;
}
You'd want to split the string on the dot and then repeatedly index into the object, e.g. along the lines of:
function goDeep(obj, path) {
var parts = path.split('.'),
rv,
index;
for (rv = obj, index = 0; rv && index < parts.length; ++index) {
rv = rv[parts[index]];
}
return rv;
}
That works because you can access the property of an object in a couple of different ways: There's dotted syntax using a literal (obj.foo
), and there's bracketed syntax using a string (obj["foo"]
). In the latter case, the string can be the result of any expression, it doesn't have to be a string literal. In in all of the, rv
is set to the same value:
rv = obj.foo.bar;
// Or
rv = obj.foo["bar"];
// Or
f = "foo";
rv = obj[f].bar;
// Or
s = "b";
rv = obj.foo[s + "ar"];
'IT TIP' 카테고리의 다른 글
Python에서 개인 및 보호 메서드 상속 (0) | 2020.12.15 |
---|---|
Numpy에서 IQR을 어떻게 찾습니까? (0) | 2020.12.15 |
파이썬에서 0으로 시작하는 숫자는 무엇을 의미합니까? (0) | 2020.12.14 |
Jquery 가장 가까운 일치 요소 찾기 (0) | 2020.12.14 |
패키지 복원과 관련된 Nuget 버전 관리 문제 (0) | 2020.12.14 |