>  기사  >  웹 프론트엔드  >  es6 배열 방법은 무엇입니까?

es6 배열 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2021-09-10 14:31:067566검색

ES6 배열 메소드에는 "from()", "of()", "copyWithin()", "fill()", "find()", "findIndex()", "includes()", "가 포함됩니다. 항목()", "키()", "값()" 등

es6 배열 방법은 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

전통적인 배열 객체 메소드

  • toSource()는 객체의 소스 코드를 반환합니다.
  • toString() 배열을 문자열로 변환하고 결과를 반환합니다.
  • toLocaleString() 배열을 로컬 배열로 변환하고 결과를 반환합니다.
  • valueof () 배열 객체의 원래 값을 반환합니다. 원래 배열을 원래 배열을 수정하지 않음, pop
concatsortreversesplice복사 Withinfill ㅋㅋㅋ finde, findIndexentries(), 키( ), 값()
unshift, shift를 수정하지 않습니다. join
slice
indexOf(), lastIndexOf()
forEach
map
filter

원래 배열 수정

  • push()는 배열 끝에 하나 이상의 요소를 추가하고 새 길이를 반환합니다.
  • unshift()는 배열의 시작 부분에 하나 이상의 요소를 추가하고 새 길이를 반환합니다.
  • pop()은 배열의 마지막 요소를 제거하고 반환합니다.
  • shift()는 배열의 첫 번째 요소를 제거하고 반환합니다.
  • sort()는 배열의 요소를 정렬합니다.
  • reverse()는 요소의 순서를 반대로 합니다. 배열에서.
  • splice()는 요소를 제거하고 배열에 새 요소를 추가합니다.

splice

Syntax

arrayObject.splice(index,howmany,item1,...,itemX)arrayObject.splice(index,howmany,item1,.....,itemX)

var arr = new Array();
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";

arr.splice(2,1);               //"George", "John"
arr.splice(1,0,"William");     //"George", "William", "John"
arr.splice(2,1,"haha");        //"George", "William", "haha"

不修改原数组

  • concat() 连接两个或更多的数组,并返回结果。
  • join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
  • slice() 从某个已有的数组返回选定的元素

slice

语法

arrayObject.slice(start,end);

  • start 必需。规定从何处开始选取。可为负,从数组尾部开始算起。
  • end 可选。规定从何处结束选取。如果没有指定,那么切分的数组包含从 start 到数组结束的所有元素。可为负,从数组尾部开始算起。
var arr = new Array();
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";

arr.slice(2,1);         //[]
arr.slice(1,2);         //"William"
arr.slice(-2,-1);         //"William"
将类似数组的对象(比如arguments)转换为真实的数组
Array.prototype.slice.call(arguments);

ES5新增数组

  • 索引方法:indexOf(),lastIndexOf()
  • 迭代方法:forEach()、map()、filter()、some()、every()
  • 归并方法:reduce()、reduceRight()
方法并不会修改原数组

索引方法

indexOf

array.indexOf(searchElement[, fromIndex])
  • 返回整数索引值,如果没有匹配(严格匹配),返回-1。
  • fromIndex可选,表示从这个位置开始搜索,若缺省或格式不合要求,使用默认值0。
var data = [2, 5, 7, 3, 5];

console.log(data.indexOf(5, "x")); // 1 ("x"被忽略)
console.log(data.indexOf(5, "3")); // 4 (从3号位开始搜索)

lastIndexOf

array.lastIndexOf(searchElement[, fromIndex])
  • 从字符串的末尾开始查找,而不是从开头。
  • fromIndex的默认值是array.length - 1。
var data = [2, 5, 7, 3, 5];

console.log(data.lastIndexOf(5)); // 4
console.log(data.lastIndexOf(5, 3)); // 1 (从后往前,索引值小于3的开始搜索)

console.log(data.lastIndexOf(4)); // -1 (未找到)
两个方法在比较第一个参数与数组中的每一项时,会使用全等操作符, 要求必须完全相等,否则返回-1。

迭代方法

每个方法都接受两个参数,第一个参数callback(回调函数,必选),第二个参数是一个可选的上下文参数。

  • 其中第一个参数callback接受三个参数, 当前项的值、当前项在数组中的索引、数组对象本身。即 function(value,index,arr) {};需要注意的是与我们常用的jQuery中封装的方法区别在第一个参数和第二个参数,即index和value的顺序是相反的。
  • 第二个参数是一个可选的上下文参数,是执行第一个函数参数的作用域对象,也就是上面说的callback中this所指向的值。 如果这第2个可选参数不指定,则使用全局对象代替(在浏览器是为window),严格模式下甚至是undefined。

需要注意的是除了forEach()方法,其余的迭代方法中callback需要有return值否则会返回undefined。

forEach

forEach()对数组进行遍历循环,对数组中的每一项运行给定的函数,这个方法没有返回值。

[].forEach(function(value, index, array) {
    // ...
}, [ thisObject]);
  • forEach除了接受一个必须的回调函数参数,还可以接受一个可选的上下文参数(改变回调函数里面的this指向)(第2个参数)。
  • 如果这第2个可选参数不指定,则使用全局对象代替(在浏览器是为window),严格模式下甚至是undefined.
[1, 2, 3, 4].forEach(function (item, index, array) {
  console.log(array[index] == item); // true
  sum += item;
});

alert(sum); // 10

var database = {
  users: ["张含韵", "江一燕", "李小璐"],
  sendEmail: function (user) {
    if (this.isValidUser(user)) {
      console.log("你好," + user);
    } else {
      console.log("抱歉,"+ user +",你不是本家人");    
    }
  },
  isValidUser: function (user) {
    return /^张/.test(user);
  }
};

// 给每个人法邮件
database.users.forEach(  // database.users中人遍历
  database.sendEmail,    // 发送邮件
  database               // 使用database代替上面标红的this
);

// 结果:
// 你好,张含韵
// 抱歉,江一燕,你不是本家人
// 抱歉,李小璐,你不是本家

map

map()指“映射”,对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。

[].map(function(value, index, array) {
    // ...
}, [ thisObject]);
var data = [1, 2, 3, 4];

var arrayOfSquares = data.map(function (item) {
  return item * item;
});

alert(arrayOfSquares); // 1, 4, 9, 16

filter

filter(),“过滤”,对数组中的每一项运行给定函数,返回满足过滤条件组成的数组。

array.filter(callback,[ thisObject]);
  • filter的callback函数需要返回布尔值true或false。
  • 返回值只要是弱等于== true/false就可以了,而非非得返回 === true/false。
var arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var flag = arr3.filter(function(value, index) {
  return value % 3 === 0;
}); 
console.log(flag);  // [3, 6, 9]

every

every(),判断数组中每一项都是否满足所给条件,当所有项都满足条件,才会返回true。
注意: 空数组,则返回true

array.every(callback,[ thisObject]);

var arr4 = [1, 2, 3, 4, 5];
var flag = arr4.every(function(value, index) {
  return value % 2 === 0;
}); 
console.log(flag);  // false

some

some(),判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。
注意: 空数组,则返回false

array.some(callback,[ thisObject]);

var arr5 = [1, 2, 3, 4, 5];
var flag = arr5.some(function(value, index) {
  return value % 2 === 0;
}); 
console.log(flag);   // true

원래 배열을 수정하지 않습니다

concat() 연결 두 개 이상의 배열을 사용하고 결과를 반환합니다. join()은 배열의 모든 요소를 ​​문자열에 넣습니다. 요소는 지정된 구분 기호로 구분됩니다.

🎜slice() 기존 배열에서 선택한 요소를 반환합니다. 🎜🎜🎜🎜slice🎜🎜🎜Syntax🎜🎜arrayObject.slice(start,end);🎜🎜🎜start 필수입니다. 선택을 시작할 위치를 지정합니다. 배열 끝부터 계산하여 음수일 수 있습니다. 🎜🎜끝은 선택사항입니다. 선택이 끝나는 위치를 지정합니다. 지정하지 않으면 슬라이스된 배열에는 배열의 시작부터 끝까지 모든 요소가 포함됩니다. 배열 끝부터 계산하여 음수일 수 있습니다. 🎜🎜
var arr9 = [1, 2, 3, 4];
var sum9 =arr9.reduce(function (total, curr, index, array) {
  return total * curr;
});
console.log(sum9);  // 24 
var sum9_1 =arr9.reduce(function (total, curr, index, array) {
  return total * curr;
}, 10);
console.log(sum9_1);  // 240
배열과 유사한 객체(예: 인수)를 실제 배열로 변환
Array.prototype.slice.call(arguments);
🎜🎜ES5 새 배열🎜🎜🎜🎜index 메서드: indexOf(), lastIndexOf()🎜🎜반복 메서드: forEach(), map(), filter(), some(), Every()🎜🎜Merge 메서드: Reduce(), ReduceRight()🎜🎜
메서드 원래 배열을 수정하지 않습니다.
🎜🎜🎜Index 메서드🎜🎜🎜🎜🎜indexOf🎜🎜
var arr9 = [2, 45, 30, 80];
var flag = arr9.reduceRight(function (total, curr, index) {
  return total - curr;
});
var flag_1 = arr9.reduceRight(function (total, curr, index) {
  return total - curr;
},200);
console.log(flag);  // 3
console.log(flag_1);  // 43
🎜🎜정수 인덱스 값을 반환하고, 일치하는 항목이 없으면(엄격한 일치) -1을 반환합니다. 🎜🎜fromIndex는 선택 사항이며, 기본값이나 형식이 요구 사항을 충족하지 않는 경우 기본값 0을 사용합니다. 🎜🎜
var a = [1,2,3];
Array.isArray(a);   //true
🎜🎜lastIndexOf🎜🎜
let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
🎜🎜 문자열의 처음부터가 아닌 끝부터 검색을 시작하세요. 🎜🎜fromIndex의 기본값은 array.length - 1입니다. 🎜🎜
Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);

Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]
두 메소드는 첫 번째 매개변수를 배열의 각 항목과 비교할 때 동등 연산자를 사용합니다. 그들은 완전히 동일해야 하며, 그렇지 않으면 -1이 반환됩니다.
🎜🎜🎜Iteration method🎜🎜🎜🎜각 메소드는 두 개의 매개변수를 허용하는데, 첫 번째 매개변수는 콜백(콜백 함수, 필수)이고 두 번째 매개변수는 선택적 컨텍스트 매개변수입니다. 🎜🎜🎜첫 번째 매개변수 콜백은 세 개의 매개변수, 즉 현재 항목의 값, 배열에 있는 현재 항목의 인덱스, 배열 객체 자체를 받아들입니다. 즉, function(value,index,arr) {}; 우리가 일반적으로 사용하는 jQuery에 캡슐화된 메소드와의 차이점은 첫 번째 매개변수와 두 번째 매개변수, 즉 index와 value의 순서가 반대라는 점에 유의해야 합니다. . 🎜🎜두 번째 매개변수는 선택적 컨텍스트 매개변수로, 위에서 언급한 콜백에서 this가 가리키는 값인 첫 번째 함수 매개변수를 실행하는 범위 개체입니다. 두 번째 선택적 매개변수를 지정하지 않으면 전역 객체가 대신 사용되거나(브라우저의 창) 엄격 모드에서는 정의되지 않은 경우도 있습니다. 🎜🎜🎜forEach() 메서드를 제외하고 다른 반복 메서드의 콜백에는 반환 값이 있어야 하며, 그렇지 않으면 정의되지 않은 반환이 발생한다는 점에 유의해야 합니다. 🎜🎜🎜forEach🎜🎜🎜forEach()는 배열을 반복하고 배열의 각 항목에 대해 지정된 함수를 실행합니다. 이 메서드에는 반환 값이 없습니다. 🎜
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
🎜🎜forEach 필수 콜백 함수 매개변수를 허용하는 것 외에도 선택적 컨텍스트 매개변수(콜백 함수에서 this 포인터 변경)(두 번째 매개변수)도 허용할 수 있습니다. 🎜🎜두 번째 선택적 매개변수가 지정되지 않으면 전역 개체가 대신 사용되거나(브라우저의 창) 엄격 모드에서는 정의되지 않은 경우도 있습니다. 🎜🎜
array. copyWithin(target, start = 0, end = this.length);
🎜🎜map🎜🎜🎜map()은 "매핑"을 참조하고 실행됩니다. 배열의 각 항목에 대해 주어진 함수를 호출하고 각 함수 호출 결과의 배열을 반환합니다. 🎜
// 将3号位复制到0号位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]

// -2相当于3号位,-1相当于4号位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
['a', 'b', 'c'].fill(7);   // [7, 7, 7]

let arr = new Array(3).fill([]);
arr[0].push(5);       // [[5], [5], [5]]
🎜🎜filter🎜🎜🎜filter(), "filter"는 배열의 각 항목에 대해 지정된 함수를 실행하고 필터 조건을 충족하는 배열을 반환합니다. 🎜
[1, 4, -5, 10].find((n) => n < 0)
// -5
[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10
🎜🎜filter의 콜백 함수는 true 또는 false의 부울 값을 반환해야 합니다. 🎜🎜반환 값이 == true/false와 약하게 같으면 === true/false를 반환할 필요는 없습니다. 🎜🎜
[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2
🎜🎜every🎜🎜🎜every()는 배열의 각 항목이 주어진 조건을 충족하는지 확인합니다. 모든 항목이 조건을 충족하면 true가 반환됩니다.
🎜참고: 배열이 비어 있으면 true를 반환합니다🎜🎜🎜array.every(callback,[thisObject]);
🎜
[1, 2, 3].includes(2) // true
🎜🎜some🎜🎜🎜 some(), 배열에 조건에 맞는 항목이 있는지 확인합니다. 하나의 항목이 조건을 충족하는 한 true를 반환합니다.
🎜참고: 배열이 비어 있으면 false가 반환됩니다🎜🎜🎜array.some(callback,[thisObject]);🎜
for (let index of [&#39;a&#39;, &#39;b&#39;].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of [&#39;a&#39;, &#39;b&#39;].values()) {
  console.log(elem);
}
// &#39;a&#39;
// &#39;b&#39;

for (let [index, elem] of [&#39;a&#39;, &#39;b&#39;].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"
🎜🎜🎜Merge 메서드🎜🎜🎜

这两个方法相比前面可能稍微复杂一些,它们都会迭代数组中的所有项,然后生成一个最终返回值。这两个方法接收两个参数。

  • 第一个参数callback,函数接受4个参数分别是(初始值total必选,当前值currentValue必选,索引值currentIndex可选,当前数组arr可选),函数需要返回一个值,这个值会在下一次迭代中作为初始值。
  • 第二个参数是迭代初始值(initialValue),参数可选,如果缺省,初始值为数组第一项,从数组第一个项开始叠加,缺省参数要比正常传值少一次运算。

reduce

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。 reduce() 对于空数组是不会执行回调函数的。

array. reduce(function(total, currentValue, currentIndex, array) {<br>    // ...<br>});

var arr9 = [1, 2, 3, 4];
var sum9 =arr9.reduce(function (total, curr, index, array) {
  return total * curr;
});
console.log(sum9);  // 24 
var sum9_1 =arr9.reduce(function (total, curr, index, array) {
  return total * curr;
}, 10);
console.log(sum9_1);  // 240

reduceRight

reduceRight()和reduce()相比,用法类似,差异在于reduceRight是从数组的末尾开始实现的。

array.reduceRight(callback,[ thisObject]);

var arr9 = [2, 45, 30, 80];
var flag = arr9.reduceRight(function (total, curr, index) {
  return total - curr;
});
var flag_1 = arr9.reduceRight(function (total, curr, index) {
  return total - curr;
},200);
console.log(flag);  // 3
console.log(flag_1);  // 43

Array方法

isArray

判断参数是否是”Array”返回true或false。

var a = [1,2,3];
Array.isArray(a);   //true

ES6数组方法

Array方法

Array.from()

用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。

let arrayLike = {
    &#39;0&#39;: &#39;a&#39;,
    &#39;1&#39;: &#39;b&#39;,
    &#39;2&#39;: &#39;c&#39;,
    length: 3
};

let arr2 = Array.from(arrayLike); // [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]

Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);

Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]

Array.of()

用于将一组值,转换为数组。

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]

实例方法

会改变原数组

  • copyWithin()

在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。

array. copyWithin(target, start = 0, end = this.length);
  • target(必需):从该位置开始替换数据。如果为负值,表示倒数。
  • start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
  • end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
// 将3号位复制到0号位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]

// -2相当于3号位,-1相当于4号位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
  • fill()

使用给定值,填充一个数组。

[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;].fill(7);   // [7, 7, 7]

let arr = new Array(3).fill([]);
arr[0].push(5);       // [[5], [5], [5]]

不会改变原数组

  • find()

用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。

[1, 4, -5, 10].find((n) => n < 0)
// -5
[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10
  • findIndex()

findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。

[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2
  • includes()

返回一个布尔值,表示某个数组是否包含给定的值。

[1, 2, 3].includes(2) // true
  • entries(),keys() 和 values()

ES6提供了三个新方法:entries()、keys()和values(),用来遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对数组的键名的遍历、values()是对数组键值的遍历,entries()方法是对数值的键值对的遍历。

for (let index of [&#39;a&#39;, &#39;b&#39;].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of [&#39;a&#39;, &#39;b&#39;].values()) {
  console.log(elem);
}
// &#39;a&#39;
// &#39;b&#39;

for (let [index, elem] of [&#39;a&#39;, &#39;b&#39;].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"

如果不使用for...of循环,可以手动调用遍历器对象的next方法,进行遍历。

let letter = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];
let entries = letter.entries();
console.log(entries.next().value); // [0, &#39;a&#39;]
console.log(entries.next().value); // [1, &#39;b&#39;]
console.log(entries.next().value); // [2, &#39;c&#39;]

【推荐学习:javascript高级教程

위 내용은 es6 배열 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.