您的位置:首页 > Web前端 > JavaScript

js 对Array的补充

2016-03-14 15:05 330 查看
Array.form的用法

1.可以将各种值转为真正的数组,并且还提供
map
功能。这实际上意味着,只要有一个原始的数据结构,你就可以先对它的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法。

2.另一个应用是,将字符串转为数组,然后返回字符串的长度。因为它能正确处理各种Unicode字符,可以避免JavaScript将大于
\uFFFF
的Unicode字符,算作两个字符的bug。

<!DOCTYPE html>
<html>
<head>

</head>
<body>
<p id="h01"></p>

<script>
'use strict';

//便利NodeList数组
let ps = document.querySelectorAll('p');
console.log(ps);
Array.from(ps).forEach( function(p) {
console.log(p);
});

//装换成数组
console.log(Array.from("hello"));

//本来的数组,返回原来的
let array0 = ["d","f","g"];
console.log(Array.from(array0));

//按照一定的规则改变数组内的值
console.log(Array.from([1,3,5]).map(x => x * x * x));

console.log(Array.from([1,,4,6,,0],(n => n || 0)));

//自定义改变数组内的值
function typesOf () {
return Array.from(arguments,value => typeof(value)) ;
}

console.log(typesOf(null,[],NaN));
</script>
</body>
</html>


Array.of()

Array.of
方法用于将一组值,转换为数组

这个方法的主要目的,是弥补数组构造函数
Array()
的不足。因为参数个数的不同,会导致
Array()
的行为有差异。

Array.of
基本上可以用来替代
Array()
new Array()
,并且不存在由于参数不同而导致的重载。它的行为非常统一。

Array.of
总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

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


Array.of() // []
Array.of(undefined) // [undefined]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]


Array.of
方法可以用下面的代码模拟实现。

function ArrayOf(){
return [].slice.call(arguments);
}


数组推导

提供简洁写法,允许直接通过现有数组生成新数组。这项功能本来是要放入ES6的,但是TC39委员会想继续完善这项功能,让其支持所有数据结构(内部调用iterator对象),不像现在只支持数组,所以就把它推迟到了ES7。Babel转码器已经支持这个功能

var a1 = [1, 2, 3, 4];
var a2 = [for (i of a1) i * 2];

a2 // [2, 4, 6, 8]


上面代码表示,通过
for...of
结构,数组
a2
直接在
a1
的基础上生成。

注意,数组推导中,
for...of
结构总是写在最前面,返回的表达式写在最后面。

for...of
后面还可以附加
if
语句,用来设定循环的限制条件。

var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];

[for (year of years) if (year > 2000) year];
// [ 2006, 2010, 2014 ]

[for (year of years) if (year > 2000) if(year < 2010) year];
// [ 2006]

[for (year of years) if (year > 2000 && year < 2010) year];
// [ 2006]


上面代码表明,
if
语句要写在
for...of
与返回的表达式之间,而且可以多个
if
语句连用。

map 和filter的区别:

map是对原数组的加工,filter是对原数组的过滤
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: