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 |