728x90
반응형
질문 : 문자열 경로로 중첩 된 JavaScript 객체 및 배열에 액세스
다음과 같은 데이터 구조가 있습니다.
var someObject = {
'part1' : {
'name': 'Part 1',
'size': '20',
'qty' : '50'
},
'part2' : {
'name': 'Part 2',
'size': '15',
'qty' : '60'
},
'part3' : [
{
'name': 'Part 3A',
'size': '10',
'qty' : '20'
}, {
'name': 'Part 3B',
'size': '5',
'qty' : '20'
}, {
'name': 'Part 3C',
'size': '7.5',
'qty' : '20'
}
]
};
그리고 다음 변수를 사용하여 데이터에 액세스하고 싶습니다.
var part1name = "part1.name";
var part2quantity = "part2.qty";
var part3name1 = "part3[0].name";
part1name은 "Part 1"인 someObject.part1.name
의 값으로 채워 져야합니다. 60으로 채워진 part2quantity도 마찬가지입니다.
어쨌든 순수한 자바 스크립트 또는 JQuery로 이것을 달성 할 수 있습니까?
답변
이미 가지고있는 유사한 코드를 기반으로이 작업을 수행했는데 작동하는 것 같습니다.
Object.byString = function(o, s) {
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, ''); // strip a leading dot
var a = s.split('.');
for (var i = 0, n = a.length; i < n; ++i) {
var k = a[i];
if (k in o) {
o = o[k];
} else {
return;
}
}
return o;
}
용법::
Object.byString(someObj, 'part3[0].name');
http://jsfiddle.net/alnitak/hEsys/ 에서 작동 데모를 참조하십시오.
EDIT 일부는 가장 왼쪽 인덱스가 개체 내에서 올바르게 중첩 된 항목에 해당하지 않는 문자열을 전달하면이 코드에서 오류가 발생한다는 사실을 발견했습니다. 이것은 유효한 문제이지만 IMHO는이 함수가 유효하지 않은 인덱스에 대해 undefined
를 자동으로 반환하도록하는 것보다 호출 할 때 try / catch
출처 : https://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-and-arrays-by-string-path
728x90
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
JavaScript 날짜 형식을 지정하는 방법 (0) | 2022.03.26 |
---|---|
JavaScript 변수 이름에 유효한 문자 목록 (0) | 2022.01.17 |
Javascript에서 배열 시작 부분에 새 배열 요소를 추가하는 방법 (0) | 2022.01.06 |
스크롤 후 요소가 보이는지 확인하는 방법 (0) | 2022.01.06 |
[Javascript] html 클래스가 포함되어 있는지 확인하는 방법 (0) | 2022.01.06 |