[자바스크립트]JSON 합치기 (Merge)



다음과 같은 JSON이 있을때 같이 key값 끼리 array로 합치는 방법


[{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "array_key": ["array1", "array2", "array3"]
}, {
    "key1": "value1_1",
    "key2": "value2_1",
    "key3": "value3_1",
    "array_key": ["array1_1", "array2_1", "array3_1", "array4"]

}, {
    "key1": "value1_last",
    "key2": "value2_last",
    "key3": "value3_last",
    "array_key": ["array1_last"]

}]



javascript의 concat과 reduce 함수를 사용하면 된다.


array.reduce(callback, [,initialvalue])

배열의 모든 요소에 대해서 callback함수를 호출한다.
callback함수의 결과 값은 누적되며 다음 callback함수를 호출할 때 파라미터로 사용할 수 있다.

요소 

 정의

 필수 여부

 array

 배열 객체

 필수

 callback

 최대 파라메터를 4개 까지 가지고 있는 함수

 필수

 initialvalue

 누적을 시작하는 초기값을 설정 할 수 있음

 선택



array.concat([item1,[item2...[itemN]]])

둘 이상의 배열을 결합한다.


var data = [{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "array_key": ["array1", "array2", "array3"]
}, {
    "key1": "value1_1",
    "key2": "value2_1",
    "key3": "value3_1",
    "array_key": ["array1_1", "array2_1", "array3_1", "array4"]

}, {
    "key1": "value1_last",
    "key2": "value2_last",
    "key3": "value3_last",
    "array_key": ["array1_last"]

}];

var result = data.reduce(function(r, e) {
  return Object.keys(e).forEach(function(k) {
    if(!r[k]) r[k] = [].concat(e[k])
    else r[k] = r[k].concat(e[k])
  }), r
}, {});

console.log(result);


그럼 다음과 같은 결과를 얻을 수 있다.


[{
	"key1" : ["value1", "value1_1", "value1_last"],
	"key2" : ["value2", "value2_1", "value2_last"],
	"key3" : ["value3", "value3_1", "value3_last"],
	"array_key" : ["array1", "array2", "array3", "array1_1", "array2_1", "array3_1", "array4", "array1_last"]
}]



예제를 직접 실행하면 다음과 같이 볼 수 있다.




+ Recent posts