JAVASCRIPT

[js] 배열스크립트 종합선물세트

0hee 2007. 7. 6. 09:16
//
//   Array library

// by 행복한고니 (20041012)
//
// Change log
//   - 2005. 7. 21 Array.prototype.insert 추가

// 배열에 검색한 값이 있으면 인덱스 번호를 리턴, 없으면 -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<len; 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<this.length; i++) {
if((typeof this[i]).toLowerCase() == 'number') ret += this[i];
}

return ret;
}

// 배열의 현재 인덱스
Array.prototype._index = 0;

// 현재 배열요소를 반환한다.
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.insert = function(offset) {
var ret = new Array();
for (var i=0; i < this.length; i++) {
ret.push(this[i]);

if (i == offset) {
for(var j=1; j < arguments.length-1; j++) ret.push(arguments[j]);
}
}

return ret;
}