배열 스크립트 종합선물세트

http://mygony.com
http://mygony.com/tt/index.php?pl=84&nc=1

두번째 종합선물세트.
구현이 그다지 어려운 것들은 아니지만, 가끔 사용하다보면 귀찮아질때가 있는 배열관련 스크립트입니다. 대부분 php 함수의 명명규칙을 따랐으므로, 어떤 역할을 하는건지 구체적으로 알고 싶다면 PHP 함수에서 Array Functions 장을 참고하면 됩니다.

//
// Array method library
// by 행복한고니 (20041012)
//

// 배열에 검색한 값이 있으면 인덱스 번호를 리턴, 없으면 -1을 리턴
Array.prototype.search = function(val) {
var len = this.length;

for (var i=0; i < len; i++) {
if (this[i] == val) return i;
}

return -1;
}

// search 메소드와 같으나 대소문자 구별안함
Array.prototype.isearch = function(val) {
var len = this.length;

if ((typeof val).toLowerCase() == ‘string’) val = val.toLowerCase();
for (var i=0; i < len; i++) {
if (typeof this[i] != typeof val) continue;
if ((typeof val).toLowerCase() == ‘string’ && val == this[i].toLowerCase()) return i;
else if (val == this[i]) return i;
}
return -1;
}

// 키 배열을 받아서 문자열 인덱스가 있는 객체를 반환한다.
// 만일 배열의 크기가 서로 맞지 않으면 빈 array가 반환된다.
// 리턴값은 object
Array.prototype.combine = function(keyArr) {
if (this.length != keyArr.length) return [];

var ret = {};
for (var i=0; i < this.length; i++) ret[keyArr[i]] = this[i]; return ret;
}

// 범위의 값을 포함하고 있는 배열 반환
Array.prototype.range = function(Low, High, Step) {
var ret = [];
var t1 = (typeof Low).toLowerCase();
var t2 = (typeof High).toLowerCase();

if (Step == undefined) Step = 1;
if (!((t1 == ‘number’ || t1 == ‘string’) && t1 == t2)) return ret;
if (t1 == ‘string’) { Low = Low.charCodeAt(0); High = High.charCodeAt(0); }

for (var i=Low; i <= High; i+=Step) ret[ret.length] = (t1=='string')?String.fromCharCode(i):i; return ret;
}

// 배열의 각 요소에 같은 함수 적용
// 만약, funcName 이라는 함수가 있다고 하면, Array.walk(funcName)과 같이 사용한다.
// 함수의 첫번째 전달자에 값이, 두번째 전달자에 인덱스가 전달된다.
Array.prototype.walk = function(Func) {
var len = this.length;
for (var i=0; i this[i] = Func(this[i], i);
}
}

// 배열 정렬 순서를 거꾸로 한다.
// 사용자 함수를 지정하면 지정한 함수로 정렬한다.
Array.prototype.rsort = function(sortFunc) {
if (sortFunc == undefined) this.sort();
else this.sort(sortFunc);
return this.reverse();
}

// 배열내에 존재하는 숫자를 모두 더한다.
Array.prototype.sum = function() {
var ret = 0;
for (var i=0; i if((typeof this[i]).toLowerCase() == ‘number’) ret += this[i];
}

return ret;
}

// 현재 배열요소를 반환한다.
Array.prototype.current = function() {
if (this._index > this.length) this._index = this.length;
return this[this._index];
}

// 현재 배열요소의 이전요소로 포인터를 이동하고 이전요소를 반환한다.
Array.prototype.prev = function() {
if (–this._index < 0) this._index++;
return this[this._index];
}

// 현재 배열요소의 다음요소로 포인터를 이동하고 다음요소를 반환한다.
Array.prototype.next = function() {
if (++this._index >= this.length) this._index–;
return this[this._index];
}

// 배열의 처음 요소로 포인터를 이동하고 요소를 반환한다.
Array.prototype.first = function() {
this._index = 0;
return this[0];
}

// 배열의 마지막 요소로 포인터를 이동하고 요소를 반환한다.
Array.prototype.end = function() {
this._index = this.length – 1;
return this[this._index];
}

// 현재 키를 반환한다.
Array.prototype.key = function() {
if (this._index < 0) this._index = 0;
else if (this.length > 0 && this._index >= this.length) this._index = this.length – 1;
return this._index;
}

Array.prototype._index = 0;