[javascript] Javascript Array Concat이 작동하지 않습니다. 왜?

그래서이 jqueryui 위젯을 만들었습니다. 오류를 스트리밍 할 수있는 div를 생성합니다. 위젯 코드는 다음과 같습니다.

$.widget('ui.miniErrorLog', {
   logStart: "<ul>",   // these next 4 elements are actually a bunch more complicated.
   logEnd:   "</ul>",
   errStart: "<li>",
   errEnd:   "</li>",
   content:  "",
   refs:     [],

   _create: function() { $(this.element).addClass( "ui-state-error" ).hide(); },

   clear: function() {
      this.content = "";
      for ( var i in this.refs )
         $( this.refs[i] ).removeClass( "ui-state-error" );
      this.refs = [];
      $(this.element).empty().hide();
   },

   addError: function( msg, ref ) {
      this.content += this.errStart + msg + this.errEnd;
      if ( ref ) {
         if ( ref instanceof Array )
            this.refs.concat( ref );
         else
            this.refs.push( ref );
         for ( var i in this.refs )
            $( this.refs[i] ).addClass( "ui-state-error" );
      }
      $(this.element).html( this.logStart + this.content + this.logEnd ).show();
   },

   hasError: function()
   {
      if ( this.refs.length )
         return true;
      return false;
   },
});

여기에 오류 메시지를 추가하고 오류 상태가 될 페이지 요소에 대한 참조를 추가 할 수 있습니다. 대화의 유효성을 검사하는 데 사용합니다. “addError”메소드에서 다음과 같이 단일 ID 또는 ID 배열을 전달할 수 있습니다.

$( "#registerDialogError" ).miniErrorLog(
   'addError',
   "Your passwords don't match.",
   [ "#registerDialogPassword1", "#registerDialogPassword2" ] );

그러나 ID 배열을 전달하면 작동하지 않습니다. 문제는 다음 줄에 있습니다.

if ( ref instanceof Array )
   this.refs.concat( ref );
else
   this.refs.push( ref );

왜 그 연결이 작동하지 않습니다. this.refs와 ref는 모두 배열입니다. 그렇다면 concat이 작동하지 않는 이유는 무엇입니까?

보너스 :이 위젯에서 다른 멍청한 일을하고 있습니까? 첫 번째입니다.



답변

concat 메서드는 원래 배열을 변경하지 않으므로 다시 할당해야합니다.

if ( ref instanceof Array )
   this.refs = this.refs.concat( ref );
else
   this.refs.push( ref );


답변

그 이유는 다음과 같습니다.

정의 및 사용법

concat () 메서드는 둘 이상의 배열을 결합하는 데 사용됩니다.

이 메서드는 기존 배열을 변경하지 않지만 결합 된 배열의 값을 포함하는 새 배열을 반환합니다.

연결의 결과를 보유한 배열에 다시 할당해야합니다.


답변

Konstantin Dinev에서 확장하려면 :

.concat()이 있도록, 현재의 객체에 추가하지 않습니다 하지 작동 :

foo.bar.concat(otherArray);

이것은 :

foo.bar = foo.bar.concat(otherArray);


답변

=를 사용하여 값을 다시 할당해야합니다.

let array1=[1,2,3,4];
let array2=[5,6,7,8];

array1.concat(array2);
console.log('NOT WORK :  array1.concat(array2); =>',array1);

array1= array1.concat(array2);
console.log('WORKING :  array1 = array1.concat(array2); =>',array1);


답변

dataArray = dataArray.concat(array2)


답변