gtw
20
2016-09-05 15:59:01
3
2248

javascript object 동일한 key에 대해 value 합치기 질문합니다...


[{"index" : 1, "text" : "test1"}, {"index" : 1, "text" : "test2"}, {"index" : 1, "text" : "test3"},

{"index" : 2, "text" : "test1"}, {"index" : 2, "text" : "test2"}, {"index" : 2, "text" : "test3"}]

object의 구조는 이렇습니다. 여기서 index가 같은 text는 합쳐서 아래와 같이 만들고 싶습니다.

[{"index" : 1, "text" : "test1, test2, test3"}, {"index" : 2, "text" : "test1, test2, test3"}]


어떻게 하면 저런 식으로 합칠 수가 있을까요? 답변 주시면 감사하겠습니다.

0
0
  • 답변 3

  • LichKing
    16k
    2016-09-05 16:59:55


    var arr = [{"index" : 1, "text" : "test1"}, {"index" : 1, "text" : "test2"}, {"index" : 1, "text" : "test3"},
    {"index" : 2, "text" : "test1"}, {"index" : 2, "text" : "test2"}, {"index" : 2, "text" : "test3"}];
    
    var resultArr = [];
    
    for(var i = 0; i < arr.length; i++){
      var idx = getKeyIndex(resultArr, arr[i]);
      
      if(idx > -1){
    	resultArr[idx].text += ", " + arr[i].text;
      }else{
        resultArr.push(arr[i]);
      }
    }
    
    console.log(resultArr);
    
    function getKeyIndex(arr, obj){
      for(var i = 0; i < arr.length; i++){
    	if(arr[i].index === obj.index){
    		return i;
    	}
      }
      
      return -1;
    }



    이런건 소스가 더럽게나와도 한번 짜보는게 좋습니다.. 그리고 그 소스 리팩토링하면서 느끼는게 많거든요. 대충짜봤는데 확인해보세요.

    1
  • kmksk
    1k
    2016-09-05 17:10:08

    underscore.js 를 쓰시면 됩니다.


    https://jsfiddle.net/5xz8em5h/


    var array = [{

        "index": 1,

        "text": "test1"

      }, {

        "index": 1,

        "text": "test2"

      }, {

        "index": 1,

        "text": "test3"

      },

      {

        "index": 2,

        "text": "test1"

      }, {

        "index": 2,

        "text": "test2"

      }, {

        "index": 2,

        "text": "test3"

      }

    ];



    var group = _.map(_.groupBy(array, function(doc) {

      return doc.index;

    }), function(grouped) {

      var _text = _.pluck(grouped, "text").join();

      return {

        "index": grouped[0].index,

        "text": _text

      };

    });



    _.each(group, function(obj) {

      $('body').append("index : " + obj.index + ",  text : " + obj.text + "</br>");

    });


    1
  • gtw
    20
    2016-09-05 17:12:09
    두분 모두 감사합니다! 참고하겠습니다.
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.