is
15
2017-11-14 21:54:02.0
5
102

자바스크립트 배열관련 질문입니다.


var arr = new Array();
arr.push('a', '1');
arr.push('b', '2');
arr.push('a', '3');
arr.push('c', '4');
arr.push('a', '5');

위 배열을 아래와 같은 배열로 만들고 싶은데.. 쉽지 않네요 도와주세요!

newArray = [a135, b2, c4]; //새로 생성된 배열 (빨간색 표시처럼 a라는 값에 속한 1,3,5값을 붙여줍니다.)


0
1
  • 답변 5

  • LichKing
    6k
    2017-11-14 22:54:20.0


    var obj = {};
    for(var i = 0; i < arr.length; i+=2){
      if(!obj[arr[i]]){
        obj[arr[i]] = "";
         }
    
        obj[arr[i]] += arr[i+1];
    }
    
    var result = [];
    for(var key in obj){
      result.push(key + obj[key]);
    }


    잠깐 생각해봤는데 이렇게하면 일단 되긴하구요. 좀 더 좋은 코드가 나올수 있을것 같긴한데...그런 고민도 한번 해보세요. 일단 결과는 나오네요.




    0
  • 에르딘트
    1k
    2017-11-14 23:32:51.0

    var arr = [];

    arr.push({a:1});

    arr.push({b:2});

    arr.push({a:3});


    이런식으로 배열에 객체를 넣으세요~ ㅂㅂ~

    0
  • termy
    34
    2017-11-14 23:49:21.0 작성 2017-11-14 23:50:29.0 수정됨

    잘 모르겠네요..

    Object.entries(
      arr.reduce((acc, v, i) => !!(i%2) ? Object.assign(acc, { [arr[i-1]] : acc[arr[i-1]] * 10 + +v || +v  } ) : acc , {})
    ).map(i => i.join(''))
    
    Object.entries(
      arr.reduce((acc, v, i) => !!(i%2) ? Object.assign(acc, { [arr[i-1]] : acc[arr[i-1]] ? acc[arr[i-1]] + v : v } ) : acc , {})
    ).map(i => i.join(''))




    0
  • 푸르게
    339
    2017-11-15 01:02:10.0 작성 2017-11-15 01:10:43.0 수정됨

    https://jsbin.com/nedeguz/3/edit?js,console

    var arr = new Array();
    arr.push('a', '1');
    arr.push('b', '2');
    arr.push('a', '3');
    arr.push('c', '4');
    arr.push('a', '5');
    
    var temp = {};
    arr.map(transform(temp));
    
    var result = Object.values(temp);
    console.log(result);
    
    function transform(temp) {
      var lastAlphabet = '';
      
      return function(val, idx) {
        if (idx%2 === 0) {
          temp[val] = temp[val] || val;
          lastAlphabet = val;
        } else {
          temp[lastAlphabet] += val;
        }
      };
    }



    0
  • is
    15
    2017-11-15 10:00:18.0

    답변주신분들 감사합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.