자바스크립트에서 배열은..

정말 자주 쓰고 유용하다.


그런데 Array(배열)에서 하나의 요소를 삭제하고 싶을땐 어떻게 해야할까?


http://www.w3schools.com/jsref/jsref_obj_array.asp

왜 이 많은 메소드 중에 하나의 요소를 삭제하는 것이 없단 말인가?!


구글신에게 물어보았다.


//Array Remove - By John Resig (MIT Licensed) - http://ejohn.org/blog/javascript-array-remove/

Array.prototype.remove = function(from, to) {

var rest = this.slice((to || from) + 1 || this.length);

this.length = from < 0 ? this.length + from : from;

return this.push.apply(this, rest);

};


오... Array 에 remove 라는 것을 추가하도록 알려주었다.


그런데 왜 이렇게 간단한 소스가 기본으로 제공되지 않는거지? 라는 생각으로 조금 더 찾아봤더니..


방법이 있었다.


그 힌트는 바로 splice !


splice 사용법은

배열.splice(시작점, 길이 [, 추가요소1, ... ,추가요소n] );


시작점을 기준으로 길이만큼 Remove 하고 추가요소들을 추가해주는 메소드


일단 예를 보자.


ex)

var m = ["a", "b", "c", "d"];

m.splice(1, 0, "f", "g");

=> [] 리턴 값은 빈 배열이 리턴되고

=> m =  ["a", "f", "g", "b", "c", "d"]


var m = ["a", "b", "c", "d"];

m.splice(1, 2, "f", "g");

=> ["b", "c"]

=> m = ["a", "f", "g", "d"]



즉, 시작점에서부터 길이까지 자른 배열을 리턴해주고 그 시작점부터 추가요소를 넣어준다!

지정한 만큼 뽑아내고 추가요소들을 추가해주는 것이였다.


잘~ 생각해보니..

빼기만하고 추가요소를 안넣으면.................?


결국 remove와 같은것이 아닌가!



그래서 나온 결론...

ex)

var m = ["a", "b", "c", "d"];

m.splice(1, 1);

=> ["b"]

=> m = ["a", "c", "d"]


오우~~~


역시.. remove따위는 필요 없는게로군 ㅎ


잘~된다.


멋져~



Posted by Mooki
,