Web 前端开发 让前端飞Web前端之路

2017.12.9-学习笔记:篇五之es6数组的扩展

2017-12-09  本文已影响23人  bixin

数组的扩展

→点我去看基本的数组方法
→点我去看基本的字符串方法
→点我去看ES5新增的数组方法
→点我去看ES6新增的字符串方法

1.扩展运算符(...)

它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

console.log(...[1, 2, 3])
// 1 2 3
 console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
function add(a, b, c) {
  console.log(a + b + c);
}
let arr = [1, 2, 3];
add.apply(null, arr); // 6 ==> es5
add(...arr); // 6 ==> es6

Math.max.apply(null, [1, 2, 3]); // 3 ==> es5 写法
Math.max(...[1, 2, 3]); // 3 ==> ES6 写法
// 1.复制数组
const a = [1, 2];
const b = [...a];
const [...c] = a;

// 2.合并数组(取代concat)
var a = [1, 2];
var b = [3, 4];
a.concat(b); // [1,2,3,4] ==> es5 写法
[...a, ...b]; // [1,2,3,4] ==> es6 写法

// 3.与解构赋值结合,生成数组
let [a, ...b] = [1, 2, 3, 4]
a // 1
b // [2,3,4]

// 4.将字符串转为真正的数组
let str = "abc";
[...str] // ["a","b","c"];
Array.from('abc'); // ['a','b','c'];

str.split("").reverse().join(""); ==> es5 写法
[...str].reverse().join(""); ==> es6 写法

2.array.from

Array.from(arrayLike: ?, mapFn?: fn(elt: ?, i: number), thisArg?: ?)

let arrLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
  length: 3
};

var arr1 = [].slice.call(arrLike); // ["a", "b", "c"] ==> es5
let arr2 = Array.from(arrLike); // ["a", "b", "c"] ==> es6
Array.from('abc'); // ['a','b','c'];
[...'abc']; // ['a','b','c'];
'abc'.split(''); // ['a','b','c'];
Array.from('123',x=>x+'a'); // ["1a", "2a", "3a"]
// 用arguments
function typesOf() {
  return Array.from(arguments, p => typeof p)
}
typesOf(null, [], NaN, 'abc', undefined, {}); // ["object", "object", "number", "string", "undefined", "object"]

// 用rest参数
function typesOf(...rest) {
  return Array.from(rest, p => typeof p)
}
typesOf(null, [], NaN, 'abc', undefined, {}); // ["object", "object", "number", "string", "undefined", "object"]
Array.from({length:2},()=>'a'); // ["a", "a"]

将 Set 结构转为数组

let items = new Set([1, 2, 3]);
let array = Array.from(items);

3.array.of

1.该方法返回参数值组成的数组。如果没有参数,就返回一个空数组。
2.替代Array()或new Array(),并且不存在由于参数不同而导致的重载。
( 感觉没什么用,直接用中括号不就完了吗 [ ] )

4.数组实例的copyWithin

[].copyWithin(target: number, start: number, end?: number)

['a','b','c'].copyWithin(0,1); // ["b", "c", "c"];

5.数组实例的find和findIndex

[].find(callback: fn(element: ?, index: number, array: [?]) : bool, thisArg?: ?)

[].findIndex(callback: fn(element: ?, index: number, array: [?]), thisArg?: ?)

6.数组实例的fill

9.数组实例的includes

[].includes(value: ?)

编程风格之类数组对象转数组

let ps = document.querySelectorAll('p');

// es5
[].slice.call(ps).forEach(p=> {
  console.log(p.innerText);
});

// es6
Array.from(ps).forEach(p=> {
  console.log(p.innerText);
});
[...ps].forEach(p=>{console.log(p.innerText)});



Knowledge changes the mind

上一篇 下一篇

猜你喜欢

热点阅读