rem
2018-10-02 18:37:56 작성 2018-10-02 18:40:24 수정됨
4
619

프로토타입으로 생성한 이중배열의 index들을 조작하는 방법이 궁금합니다


      function altarray() {
        var na = Object.create(Array.prototype);
            na = (Array.apply(na, [null, ...arguments]));
        return (na)
      }
      var array = new altarray(['hi', 'my', 'name', 'is', '123'])


배열 속 원소들의 index 값을 조정하고 있는데요

단일배열일 경우에는 첫 번째 index 값이 null로 생성되며 이건 문제 없이 잘 작동하는데

이중/혹은 다중배열로 생성할 경우엔 상속된 배열의 index 값이 0부터 시작합니다



저 값도 0 = null로 만든 후 1부터 시작하게 할 수는 없을까요?

물론 여기서 만족하고 단일 배열을 원하는 갯수만큼 생성하는 방법도 있으나 이렇게 되면 나중에 배열을 사용할 때 좀 불편하다고 생각해서요

3번째 줄을 [null, [null, ...arguments]]로 바꿔도 결국 가장 안쪽 원소들의 index값은 항상 0으로 나타나네요.

도움좀 주실 수 있을까요?

0
  • 답변 4

  • 오후
    2k
    2018-10-02 18:55:23

    현재 의도하신대로 0이 null 이라는거자체부터도 다차원배열(이중배열)인 상태인데요.
    [ null ,    {hi.my....} ]
    단일차원배열 은 2번쨰항목으로들어간 {hi.my....} 자체가  단일배열일거구요


    0번 index 가 null 이어야한다면 

          var array = new altarray([null, 'hi', 'my', 'name', 'is', '123'])
    로 호출하시면될거같아보이네요.



    추가적으로 답변은아니고 개인적의견인데 

    """"
    물론 여기서 만족하고 단일 배열을 원하는 갯수만큼 생성하는 방법도 있으나 이렇게 되면 나중에 배열을 사용할 때 좀 불편하다고 생각해서요
    """""

    배열의 index 는 0 부터 기본개념인데 0번을 null 로 두는게 더 불편하지않을까하는 개인적인생각입니다.

  • rem
    2018-10-02 19:12:31 작성 2018-10-02 19:13:20 수정됨

    우선 답변 감사합니다

    [null, 'hi', 'my', 'name', 'is', '123'])

    답변에서 배열을 이런 방식으로 쓰라고 하셨는데 이렇게 쓰게되면 코드를 만든 의미가 없어져서요.

    애초에 0값을 저렇게 비워 놓을거였다면

    array = [

    ["", 'hi', 'qwe', 'asd', 'zxv'],

    ["", 'as', 'cxv', 'qwsd', 'fgd'],

    . . .

    ]

    이런식으로 쓸수도 있었으며 실제로도 저렇게 쓰고 있었습니다

    0값을 1로 바꾸려는 이유는 html의 nth-child()에 배열 속 원소들을 순서대로 집어넣으려고 하는데 nth-child는 1부터 시작하므로 배열과 비교할 때 +1이나 -1 같이 보기 싫은 계산식들이 매번 추가되어야 해서 아예 배열의 index 값을 바꿔보려고 하고 있습니다

  • jjmean2
    287
    2018-10-03 01:00:03

    이렇게 한번 해 봤습니다. 클래스를 만드는 게 복잡해서 그냥 함수로 만들었습니다. 

    function altarray(...args) {
      var array = args.map(e => Array.isArray(e) ? altarray.apply(null, e) : e);
      return [null].concat(array);
    }
    
    var array = altarray(1, 2, 3, [4, 5, 6, 7, [8, 9, 10], 11, 12], 13, 14);

    결과는 다음과 같이 나오네요. 

    [ null,
      1,
      2,
      3,
      [ null, 4, 5, 6, 7, [ null, 8, 9, 10 ], 11, 12 ],
      13,
      14 ]

    그런데 이대로는 length도 하나 많게 되고 , for .. of .. 문도 null 부터 시작하므로 그런 것까지 맞추려면 좀더 작업이 필요하겠네요. 



  • rem
    2018-10-03 04:47:10 작성 2018-10-03 04:47:28 수정됨

    마침 패러미터에 대해 공부중이었는데 패러미터에 arguments를 넣는 똑같은 방식의 예문이 나와서 바로 이해했네요 ㅋㅋㅋ 감사합니다

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