다음은 ECMA5 배열의 새로운 메소드 forEach()의 모방 구현을 소개하는 코드 예제입니다.
var o = { forEach: function (callback) { // alert(this.length); for (var i = , len = this.length; i < len; i++) { callback && callback(this[i], i, this); } }, get length(){ var sum=; for(var n in this) { sum+=; } return sum; } }; Object.defineProperty(o,"length",{enumerable:false}); Object.defineProperty(o,"forEach",{enumerable:false}); o[] = ; o[] = ; o[] = ; o.forEach(function(v,i,arr){ arr[i]=v+; console.log(arr[i]+"callback"); });
주목할 만한 점:
1. 콜백 기능 사용
2.defineProperty와 DefineProperties 함수의 의미
이 두 함수는 모두 객체 속성의 네 가지 주요 특성인 값, 쓰기 가능성, 열거 가능성 및 구성 가능성을 정의할 수 있습니다
아직 ECMA5의 몇 가지 새로운 배열 방법을 다음과 같이 소개할 시간이 있습니다.
오늘 연습을 하다가 fitter()를 발견했습니다. 이전에 이러한 새로운 배열 방법을 본 적이 있지만 실제 전투에서는 사용한 적이 없으므로 오늘 리뷰하겠습니다.
forEaach()
이 메서드는 배열을 처음부터 끝까지 순회한 다음 배열의 각 요소에 대해 지정된 함수를 호출합니다. 이 함수는 foreach의 첫 번째 매개변수 역할을 합니다. 호출된 함수에는 현재 배열 요소, 현재 요소의 인덱스 및 순회 중인 배열의 세 가지 매개변수가 있을 수 있습니다. 매개변수가 하나만 있는 경우 이 매개변수는 현재 배열 요소입니다.
var data = [1,2,3,4,5] ; // 计算数组的和 var sum = 0 ; data.forEach(function(value){sum += value; }); // 这里的value 分别代指 data[0~4]; console.log( sum ) // 15 // 每个数组元素自加1 data.forEach(function(v, i, a){ a[i] = v + 1; }) // v 分别代指 data[0~4]; a 代指data; map() ;
map() 메서드 는 호출된 배열의 각 요소를 지정된 함수에 전달하고 함수의 반환 값이 포함된 배열(호출 배열과 정확히 동일한 형식)을 반환합니다. : 반환 값이 있어야 하며 호출된 배열을 변경해서는 안 됩니다.
var a = [1,2,3]; b = a.map(function(x) { return x * x; }); filter()
var getNum = function (a, b, k) { return a.filter(function (v) {return b.indexOf(v) > -1;})[k-1]; } var A = [3,4,5,6,7,8,9]; var B = [12,10,8,6]; console.log(getNum(A, B, 1)) console.log(getNum(A, B, 2)); every() some() ;
every()모든 배열 요소가 판단 함수를 호출하고 true를 반환하는 경우에만 반환 값이 &;와 다소 유사합니다.
some()에서는 하나의 배열 요소가 판단 함수를 true로 호출하는 한 true를 반환합니다.