ECMAScript5 신규 기능 (4)
Function 17: Array.prototype.lastIndexOf
용법은 16과 비슷하여 마지막으로 나타난 index를 얻는다
만약 브라우저가 이 방법을 실현하지 않았다면, 너는 이런 방식으로 실현할 수 있다
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(searchElement /*, fromIndex */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n !== n)
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len)
return -1;
var k = n >= 0
? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}
Function 17: Array.prototype.lastIndexOf
16 , index
,
if (!Array.prototype.lastIndexOf) {
Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = len;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n !== n)
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
var k = n >= 0
? Math.min(n, len - 1)
: len - Math.abs(n);
while (k >= 0) {
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}
Function 18: Array.prototype.every
그룹 중의 모든 항목이 모든callback function을 실행합니다. 이 function의 매개 변수는 현재 그룹 요소, 현재 요소 index, 전체 그룹입니다.function에서false로 되돌아올 때 순환 그룹을 정지합니다.true로 돌아갈 때만 계속 순환
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true
브라우저가 이 방법을 실현하지 못했을 때 다음과 같은 방식으로 대체할 수 있다
if (!Array.prototype.every) {
Array.prototype.every = function(fun /*, thisp */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t && !fun.call(thisp, t[i], i, t))
return false;
}
return true;
};
}
Function 19: Array.prototype.some
대체적인 의미는 every와 약간 비슷하다. 수조에 하나의 요소가 요구에 부합되면true로 돌아간다.따라서callback에서true로 돌아오면 더 이상 순환하지 않고false로 돌아오면 계속 순환합니다.
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true
브라우저가 지원되지 않을 때, 당신은 아래 코드로 대체할 수 있습니다
if (!Array.prototype.some) {
Array.prototype.some = function(fun /*, thisp */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t && fun.call(thisp, t[i], i, t))
return true;
}
return false;
};
}
Function 20: Array.prototype.forEach
이 함수는 그룹의 모든 원소 순환에 대한callback function을 실행합니다
function printElt(element, index, array) {
print("[" + index + "] is " + element); // assumes print is already defined
}
[2, 5, 9].forEach(printElt);
// Prints:
// [0] is 2
// [1] is 5
// [2] is 9
브라우저가 실현되지 않았을 때, 당신은 다음과 같은 방법을 통해 대체할 수 있다
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fun /*, thisp */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t)
fun.call(thisp, t[i], i, t);
}
};
}
Function 21: Array.prototype.map
순환 수조의 모든 요소는callback을 실행하고 순환 결과를 새 수조로 되돌려줍니다. 원수 그룹은 변하지 않습니다.
Sample1:
function makePseudoPlural(single) {
return single.replace(/o/g, "e");
}
var singles = ["foot", "goose", "moose"];
var plurals = singles.map(makePseudoPlural);
// plurals is ["feet", "geese", "meese"]
// singles is unchanged
Sample2
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots is now [1, 2, 3]
// numbers is still [1, 4, 9]
브라우저가 실행되지 않으면 다음과 같은 방법으로 대체할 수 있다
if (!Array.prototype.map) {
Array.prototype.map = function(fun /*, thisp */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var res = new Array(len);
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t)
res[i] = fun.call(thisp, t[i], i, t);
}
return res;
};
Function 22: Array.prototype.filter
그룹에서callback 조건에 맞는 요소를 선별합니다. 만약callback에서true로 되돌아오면 이 요소는 새 그룹에 추가됩니다
function isBigEnough(element, index, array) {
return (element >= 10);
}
// 12, 130, 44
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
브라우저가 실행되지 않으면 다음과 같이 대체할 수 있습니다.
if (!Array.prototype.filter) {
Array.prototype.filter = function(fun /*, thisp */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t) {
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}
Function 23: Array.prototype.reduce
이 함수는 두 개의 매개 변수가 있는데, 첫 번째는callbackfunction이고, 두 번째는 초기 값이다.
Callback function 형식:
.reduce(function(previousValue, currentValue, index, array){//...})
, previousValue , currentValue 。
Array.prototype.length – 1 。
,previousValue ,currentValue 。
Array.prototype.length 。
callback function .
Sample:
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
// total == 6
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
return a.concat(b);
});
// flattened is [0, 1, 2, 3, 4, 5]
브라우저가 실행되지 않으면 다음 코드로 대체할 수 있습니다
if (!Array.prototype.reduce) {
Array.prototype.reduce = function(fun /*, initialValue */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
// no value to return if no initial value and an empty array
if (len == 0 && arguments.length == 1)
throw new TypeError();
var k = 0;
var accumulator;
if (arguments.length >= 2) {
accumulator = arguments[1];
} else {
do {
if (k in t) {
accumulator = t[k++];
break;
}
// if array contains no values, no initial value to return
if (++k >= len)
throw new TypeError();
} while (true);
}
while (k < len) {
if (k in t)
accumulator = fun.call(undefined, accumulator, t[k], k, t);
k++;
}
return accumulator;
};
}
Function 24: Array.prototype.reduceRight
이 함수는 두 개의 매개 변수가 있는데, 첫 번째는callbackfunction이고, 두 번째는 초기 값이다.
Callback function 형식:.reduce(function(previousValue, currentValue, index, array){
// ...
})
, previousValue , currentValue 。
Array.prototype.length – 1 。
,previousValue ,currentValue 。
Array.prototype.length 。
callback function .
Sample:
var total = [0, 1, 2, 3].reduceRight(function(a, b) { return a + b; });
//total == 6
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
return a.concat(b);
}, []);
// flattened is [4, 5, 2, 3, 0, 1]
브라우저가 실행되지 않으면 다음과 같은 코드로 대체할 수 있습니다if (!Array.prototype.reduceRight) {
Array.prototype.reduceRight = function(callbackfn /*, initialValue */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof callbackfn !== "function")
throw new TypeError();
// no value to return if no initial value, empty array
if (len === 0 && arguments.length === 1)
throw new TypeError();
var k = len - 1;
var accumulator;
if (arguments.length >= 2) {
accumulator = arguments[1];
} else {
do {
if (k in this) {
accumulator = this[k--];
break;
}
// if array contains no values, no initial value to return
if (--k < 0)
throw new TypeError();
} while (true);
}
while (k >= 0) {
if (k in t)
accumulator = callbackfn.call(undefined, accumulator, t[k], k, t);
k--;
}
return accumulator;
};
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Microsoft Edge 편리 기능】URL 바를 카피하면 타이틀을 포함한 Markdown 형식으로 붙여넣기 가능업무로 이용하고 있는 Microsoft 계정으로 관리를 할 수 있는 것이 일인으로 보급되었던 Microsoft Edge에는, URL을 타이틀도 포함한 Markdown 형식으로 copipe 할 수 있는 편리한 기능이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.