프로그래밍 언어/HTML,CSS,JS

JavaScript 객체로 이루어진 배열의 요소 변수에 담기

Rateye 2022. 3. 26. 16:58
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
반응형