2013-04-08 9 views
4

강조설정 값은 다음과 같이 보이는 JSON이 <code>"a.0.b"</code> 같은 경로 문자열을 사용하여 내가 JSON에 값을 설정 싶어

function setValue(path, value, json) { 
    var keys = path.split('.'); 
    _.reduce(keys, function(obj, key, i) { 
    if (i === keys.length - 1) { 
     obj[key] = value; 
    } else { 
     return obj[key]; 
    } 
    }, json); 
} 

그래서 {a:[{b:'d'}]}

+0

FYI, JSON은 텍스트 형식의 데이터 교환 형식입니다. 질문에서 언급 한 것은 중첩 된 JavaScript 객체/배열입니다. –

+0

그럼'a [0] .b = 1;'과 같은 변수를 설정 하시겠습니까, 아니면 완전히 잘못 되었습니까? –

+0

'setvalue'에는 경로 문자열, 새로운 값, 그리고 값이 변경되어야하는 json이 전달됩니다. 질문을 예제로 업데이트했습니다. –

답변

2

에 JSON을 바꿀 것 setValue('a.0.b', 'd', {a:[{b:'c'}]})를 호출은 다음과 같습니다하지만이를 작성하는 간단한 방법이 있는지 궁금합니다 해결책. 나는 두 가지 가능한 솔루션을 벤치마킹했고 객체와 경로를 반복하는 것이 reduce 함수를 사용하는 것보다 빠르다. 아래의 JSPerf 테스트를 참조하십시오. http://jsperf.com/set-value-in-json-by-a-path-using-lodash-or-underscore

+1

이것은 올바른 대답으로 받아 들여야합니다 .. 감사합니다! –