js数组 与 数组函数

1,829 阅读20分钟

数组创建

*** 1. Array() 构造函数 ***

let arr1 = new Array() 创建一个空数组
let arr1 = new Array(20) 创建一个长度20的数组
let arr1 = new Array('1','2','4') 创建包含三个字符串的数组

*** 2. 字面量表示***

let arr1 = [] 创建一个空数组
let arr1 = [20] 创建一个长度20的数组
let arr1 = ['1','2','4']创建包含三个字符串的数组

数组赋值

简要归纳:

1、普通的赋值是复制栈区内容。

2、基本类型的数据在栈区存放数据自身,var a=b; //a与b无关。

引用类型数据在栈区存放数据地址。  var a=b; //a,b联动

3、基本数据类型包括:undefined,boolean,number,string,null,Symbol(E6新增,表示独一无二)

引用类型:对象、数组、函数。

*** 基本数据类型特点:***

1.值不可变 基本数据类型的值是不可改变的

2.存放在栈区 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。

*** 引用数据类型 ***

1.值可变 引用类型可以拥有属性和方法,并且是可以动态改变的。

2.同时保存在栈内存和堆内存 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

let arr1[3] = '1';//给数组赋值 数组中可包含对象,数组,函数,数字,字符 let arr1[0] = Data.now; let arr1[1] = myFunction; let arr1[2] = mycarts;

*** ES6解构赋值 (数组和对象)***

*** 定义***

ES6中允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这称为解构赋值,

***1)完全解构 (左右匹配,按照对应位置为变量赋值)

let [a, b, c] = [1, 2, 3];
console.log(a, b, c);  //1 2 3

//略微复杂一点的嵌套,但是也是模式匹配的
let [foo, [[bar], baz]] = [1, [[2], 3]];
console.log(foo, bar, baz);  //1 2 3

***2)不完全解构 (左右不匹配)

var [a] = [];    //a undefined
var [a,b] = [1] ;  //a=1;b undefined;
let [a,[b],c] = [1,[2,3],4]; //a=1;b=2;c=4;
let [a,[b,c],d] = [1,[2],3] ; // a=1;b=2;c undefined;d=3;

***3)解构报错(左右类型不一致)

var [a] = 1; //报错

var [b] = null; //报错

var [c] = undefined; //报错

var [d] = false; //报错

var [e]  = {}; //报错

***4)解构默认赋值

var [a=1,b=2] = [];  //a=1;b=2;

var [a=1] = [null] ; // a=1;  null !==undefined

var [a=1] = [undefined] ;  // a=1;

默认值可以是表达式:表达式是惰性求值,仅在用到的时候才求值;

function fn(){alert(1)};

var [a=fn()] = []; // fn会执行;

var [b=fn()] = [1] ; //fn不会执行; b=1;

默认值也可引用解构赋值的其他变量,前提是该变量已经声明:

var [a=1,b=a] = []; //a=1;b=1;

var [a=b,b=1] = []; //报错 referenceError;

*** 5) 对象的解构赋值:找同名属性,顺序不重要:***

var {b,a} = {a:1,b:2}; //  a=1;b=2;

赋值的变量名与属性名不一致:

var {color: pink,b} = {color:'#ccc',b:3};  //pink='#ccc'; b=3;

对象的解构赋值,找同名的属性,找到后将值赋给变量。(实际赋值的是后者)。

var {abc:car,bcd:color} = {abc:'丰田',bcd:'green'};  //car = '丰田' ;color='green'; 其中abc和bcd都是模式,不是变量。

var obj={a:1,b:2,c:3};    var {a,b,c}=obj;  //a=1;b=2;c=3;

var obj={a:1,b:2,c:3} ;   var {a:first,b:second,c:third}=obj;  //first=1;second=2;third=3;  a undefined,b undefined ,c undefined; a,b,c都是

模式不是实际的变量;

解构失败的值是undefined;

对象的解构赋值中,变量的声明和赋值是一体的,对于let和const来说,仅能声明一次,若重复声明则报错。

let a;let {a} = {a:1}; // 报错,重复声明变量。

解决:let a;  (let {a} = {a:1}) // a=1; javascript会将两次声明区分成两个代码块,不会报错。(容易乱,还是少用)

解构赋值的默认值:(解构赋值生效的条件是属性值严格等于undefined)

var {a:b=1} = {};  //b=1;

var {a:b=2} = {a:null}; //b=null ,null !==undefined

数组属性

*** constructor ***

*** 1.定义和用法***

在 JavaScript 中, constructor 属性返回对象的构造函数。

返回值是函数的引用,不是函数名:

JavaScript 数组 constructor 属性返回 function Array() { [native code] }

JavaScript 数字 constructor 属性返回 function Number() { [native code] }

JavaScript 字符串 constructor 属性返回 function String() { [native code] }

如果一个变量是数组你可以使用 constructor 属性来定义。

*** 2.语法***

array.constructor

返回值:一个函数对象

*** length ***

array.length

返回值:返回长度

*** prototype ***

*** 1.定义和用法***

prototype 属性使您有能力向对象添加属性和方法。

当构建一个属性,所有的数组将被设置属性,它是默认值。

在构建一个方法时,所有的数组都可以使用该方法。

注意: Array.prototype 单独不能引用数组, Array() 对象可以。 注意: 在JavaScript对象中,Prototype是一个全局属性。

*** 2.语法***

array.length

返回值:返回长度

*** 3.代码示例***

Array.prototype.myUcase=function()
{
    for (i=0;i<this.length;i++)
    {
        this[i]=this[i].toUpperCase();
    }
}
创建一个数组,然后调用 myUcase 方法:

var fruits=["Banana","Orange","Apple","Mango"];
fruits.myUcase();
fruits 数组现在的值为:
BANANA,ORANGE,APPLE,MANGO

数组方法

*** 数组排序方法***

*** sort() ***

*** 1.定义用法 ***

用于对数组的元素进行排序。

*** 2.参数 ***

  • 无参,按字母顺序排序
  • 参数为比较函数,按比较函数排序

*** 3.比较函数 ***

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 若 a 等于 b,则返回 0。 若 a 大于 b,则返回一个大于 0 的值。

arr=[3,4,2,6]
arr.sort(compare)
function compare(a,b){
  return a-b;
}

此方法可以对数组进行乱序

arr.sort(function(){
 return 0.5-Math.random()
})

*** reverse() ***

*** 1.定义用法 ***

reverse() 方法用于颠倒数组中元素的顺序。

*** 2.语法 ***

array.reverse()

返回值:一个颠倒原始顺序的数组

*** 3.参数 *** 无

*** 4.示例代码 ***

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
fruits 结果输出:
Mango,Apple,Orange,Banana

*** 数组遍历和查找方法***

*** forEach() ***

*** 1.定义用法 ***

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

注意: forEach() 对于空数组是不会执行回调函数的。 方法不改变原始数组

*** 2.语法 ***

array.forEach(function(currentValue, index, arr), thisValue)

返回值:undefined

*** 3.参数 ***

function():必须,数组中每个函数都必须调用的函数 currentValue:必须,当前元素值 index:可选,当前元素索引值 arr:可选,当前元素所属的数组对象 thisValue:可选传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值

*** 4.示例代码 ***

var numbers = [1,2,3,4,5];
var sum = 0;
numbers.forEach(numSum)
function numSum(currentValue, index, arr)
{
   console.log(currentValue)///当前元素值 1 2 3 4 5
   console.log(index)///当前元素索引 0 1 2 3 4 
   console.log(arr)///当前元素所属数组或对象 [1,2, 3, 4 ,5]
}

*** map() ***

*** 1.定义用法 ***

map:将数组映射成另一个数组

map通过指定函数处理数组的每个元素,并返回处理后新的数组,

forEach和map的区别在于,forEach没有返回值。

map需要返回值,如果不给return,默认返回undefined

map 不会改变原始数组。 map 不会对空数组进行检测

*** 2.语法 ***

var newArr=array.map(function(currentValue,index,arr), thisValue)

返回值:一个新的数组

*** 3.参数 ***

function():必须,数组中每个函数都必须调用的函数 currentValue:必须,当前元素值 index:可选,当前元素索引值 arr:可选,当前元素所属的数组对象 thisValue:可选传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值

*** 4.示例代码 ***

var numbers = [1,2,3,4,5];
var sum = 0;
var newArray=numbers.map(multipl)
console.log(newArray)///[2,4,6,8,10]
function multipl(currentValue, index, arr)
{
   console.log(currentValue)///当前元素值 1 2 3 4 5
   console.log(index)///当前元素索引 0 1 2 3 4 
   console.log(arr)///当前元素所属数组或对象 [1,2, 3, 4 ,5]
   return currentValue*2  //返回处理后的元素
}

使用场景2 假定有一个对象数组(A),将A数中对象某个属性的值存储到B数组中

var cars = [
  {model:"Buick",price:"CHEAP"},
  {model:"BMW",price:"expensive"}
];
var prices = cars.map(function(car){
    return car.price;
})
console.log(prices);//["CHEAP", "expensive"]

*** filter() ***

*** 1.定义用法 ***

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

filter() 不会改变原始数组。 filter() 不会对空数组进行检测

*** 2.语法 ***

var newArr=array.filter(function(currentValue,index,arr), thisValue)

返回值:一个新的数组

*** 3.参数 ***

function():必须,数组中每个函数都必须调用的函数 currentValue:必须,当前元素值 index:可选,当前元素索引值 arr:可选,当前元素所属的数组对象 thisValue:可选传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值

*** 4.示例代码 ***

使用场景1:假定有一个对象数组(A),获取数组中指定类型的对象放到B数组中

var porducts = [
  {name:"cucumber",type:"vegetable"},
  {name:"banana",type:"fruit"},
  {name:"celery",type:"vegetable"},
  {name:"orange",type:"fruit"}
];
// es6 filter
var filtered2 = porducts.filter(function(product){
  return product.type === "vegetable";
})
console.log(filtered2);//[{name: "cucumber", type: "vegetable"},

使用场景2 假定有一个对象数组(A),过滤掉不满足以下条件的对象 条件: 蔬菜 数量大于0,价格小于10

var products = [
  {name:"cucumber",type:"vegetable",quantity:0,price:1},
  {name:"banana",type:"fruit",quantity:10,price:16},
  {name:"celery",type:"vegetable",quantity:30,price:8},
  {name:"orange",type:"fruit",quantity:3,price:6}
];
products = products.filter(function(product){
    return product.type === "vegetable" 
    && product.quantity > 0 
    && product.price < 10
})
console.log(products);//[{name:"celery",type:"vegetable",quantity:30,price:8}]

使用场景3:假定有两个数组(A,B),根据A中id值,过滤掉B数组不符合的数据

var post = {id:4,title:"Javascript"};
var comments = [
   {postId:4,content:"Angular4"},
   {postId:2,content:"Vue.js"},
   {postId:3,content:"Node.js"},
   {postId:4,content:"React.js"},
];
function commentsForPost(post,comments){
   return comments.filter(function(comment){
     return comment.postId === post.id;
   })
}
console.log(commentsForPost(post,comments));
//[{postId:4,content:"Angular4"},{postId:4,content:"React.js"}]

*** find() && findIndex() ***

*** 1.定义用法 ***

find() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。

find() 方法为数组中的每个元素都调用一次函数执行:

当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。

findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。

findIndex() 方法为数组中的每个元素都调用一次函数执行:

当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。

find() findIndex() 不会改变原始数组。 find() findIndex() 不会对空数组进行检测

*** 2.语法 ***

var newArr=array.find(function(currentValue, index, arr),thisValue)

返回值:符合测试条件的第一个数组元素值,如果没有符合条件的则返回 undefined。

var index=array.findIndex(function(currentValue, index, arr),thisValue)

返回值:返回符合测试条件的第一个数组元素索引,如果没有符合条件的则返回 -1。

*** 3.参数 ***

function():必须,数组中每个函数都必须调用的函数 currentValue:必须,当前元素值 index:可选,当前元素索引值 arr:可选,当前元素所属的数组对象 thisValue:可选传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值

*** 4.示例代码 ***

使用场景1:假定有一个对象数组(A),找到符合条件的对象

var users = [
  {name:"Jill"},
  {name:"Alex",id:2},
  {name:"Bill"},
  {name:"Alex"}
 ];
// es6 find
user = users.find(function(user){
  return user.name === "Alex";
})
console.log(user);// {name:"Alex",id:2}找到后就终止循环

使用场景2 假定有一个对象数组(A),根据指定对象的条件找到数组中符合条件的对象

var posts = [
 {id:3,title:"Node.js"},
 {id:1,title:"React.js"}
];
var comment = {postId:1,content:"Hello World!"};
function postForComment(posts,comment){
 return posts.find(function(post){
   return post.id === comment.postId;
 })
}
console.log(postForComment(posts,comment));//{id: 1, title: "React.js"}

*** every() && some()***

*** 1.定义用法 ***

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。

every() 方法使用指定函数检测数组中的所有元素:

如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。 如果所有元素都满足条件,则返回 true。

some:数组中是否有元素满足指定的条件

如果数组中检测到有一个元素满足,则整个表达式返回 true ,且剩余的元素不会再进行检测。 如果所有元素都不满足条件,则返回 false。

every() 不会改变原始数组。 every() 不会对空数组进行检测

*** 2.语法 ***

var newArr=array.every(function(currentValue, index, arr),thisValue)

返回值:布尔值。如果所有元素都通过检测返回 true,否则返回 false。

var newArr=array.some(function(currentValue, index, arr),thisValue)

布尔值。如果数组中有元素满足条件返回 true,否则返回 false。

*** 3.参数 ***

function():必须,数组中每个函数都必须调用的函数 currentValue:必须,当前元素值 index:可选,当前元素索引值 arr:可选,当前元素所属的数组对象 thisValue:可选传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值

*** 4.示例代码 ***

使用场景1:计算对象数组中每个电脑操作系统是否可用,大于16位操作系统表示可用,否则不可用

var computers = [
 {name:"Apple",ram:16},
 {name:"IBM",ram:4},
 {name:"Acer",ram:32}
];
//ES6 some every 
var every = computers.every(function(computer){
  return computer.ram > 16;
})
console.log(every);//false
var some = computers.some(function(computer){
 return computer.ram > 16;
})
console.log(some);//true

使用场景2 假定有一个对象数组(A),根据指定对象的条件找到数组中符合条件的对象

var posts = [
 {id:3,title:"Node.js"},
 {id:1,title:"React.js"}
];
var comment = {postId:1,content:"Hello World!"};
function postForComment(posts,comment){
 return posts.find(function(post){
   return post.id === comment.postId;
 })
}
console.log(postForComment(posts,comment));//{id: 1, title: "React.js"}

数组分割方法

*** slice() && splice()***

*** 1.定义用法 ***

slice() 方法可从已有的数组中返回选定的元素。

slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

注意: slice() 方法不会改变原始数组。

splice() 方法用于插入、删除或替换数组的元素。也可分割

注意:这种方法会改变原始数组!。

*** 2.语法 ***

array.slice(start, end)

返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

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

如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

*** 3.参数 ***

slice()

start 可选。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。

end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

splice()

index 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。 howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。 item1, ..., itemX 可选。要添加到数组的新元素

*** 4.示例代码 ***

slice()

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var myBest = fruits.slice(-3,-1);
myBest 结果输出:
Lemon,Apple

splice()

从第三个位置开始删除数组后的两个元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,2);
fruits 输出结果:
Banana,Orange

移除数组的第三个元素,并在数组第三个位置添加新元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi");
fruits 输出结果:
Banana,Orange,Lemon,Kiwi,Mango

*** 数组增删改方法***

*** splice() ***

以上已讲

*** push() && unshift()***

*** 1.定义用法 ***

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

注意: 两种方法将改变数组的数目。

*** 2.语法 ***

array.push(item1, item2, ..., itemX)

返回值:数组新长度

array.unshift(item1, item2, ..., itemX)

返回值:数组新长度

*** 3.参数 ***

item1, item2, ..., itemX 必需。要添加到数组的元素。

*** pop() && shift() ***

*** 1.定义用法 ***

pop() 方法用于删除数组的最后一个元素并返回删除的元素。

shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

注意:此两种方法改变数组的长度!

*** 2.语法 ***

array.pop()

返回值:返回删除的元素/数组元素可以是一个字符串,数字,数组,布尔,或者其他对象类型。

array.shift()

返回值:返回删除的元素/数组元素可以是一个字符串,数字,数组,布尔,或者其他对象类型。

*** 数组计算方法***

*** reduce() && reduceRight()***

*** 1.定义用法 ***

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。

注意: reduce() reduceRight()对于空数组是不会执行回调函数的。

*** 2.语法 ***

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

返回值:返回计算结果

array.reduceRight(function(total, currentValue, currentIndex, arr), initialValue)

返回值:返回计算结果

*** 3.参数 ***

function():必须,数组中每个函数都必须调用的函数 total 必需。初始值, 或者计算结束后的返回值。

如果不设置,reduce()初始值为数组第一个,reduceRight()为最后一个

currentValue 必需。当前元素 currentIndex 可选。当前元素的索引 arr 可选。当前元素所属的数组对象。

initialValue 可选。传递给函数的初始值(total值)

*** 4.示例代码 ***

四舍五入后计算数组元素的总和

var numbers = [15.5, 2.3, 1.1, 4.7];
 
function getSum(total, num) {
    return total + Math.round(num);
}
var sum=numbers.reduce(getSum, 0);
console.log(sum)///

*** 数组转化方法***

*** toString() ***

*** 1.定义用法 ***

toString() 方法可把数组转换为字符串,并返回结果。

注意: 数组中的元素之间用逗号分隔。

*** 2.语法 ***

array.toString()

返回值:字符串,所有值用逗号隔开

*** join() ***

*** 1.定义用法 ***

join() 方法用于把数组中的所有元素转换一个字符串。

元素是通过指定的分隔符进行分隔的。

*** 2.语法 ***

array.join(separator)

返回值:返回一个字符串。 该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的

*** 3.参数 ***

separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

*** 4.示例代码 ***

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join(" and ");
energy 结果输出:
Banana and Orange and Apple and Mango

*** 数组取元素索引方法***

*** findIndex() ***

以上有讲

*** indexOf() && lastIndexOf() ***

*** 1.定义用法 ***

indexOf() 方法可返回数组中某个指定的元素位置。

该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。

如果在数组中没找到指定元素则返回 -1。

lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,在一个数组中的指定位置从后向前搜索。

如果要检索的元素没有出现,则该方法返回 -1。

该方法将从尾到头地检索数组中指定元素 item。开始检索的位置在数组的 start 处或数组的结尾(没有指定 start 参数时)。如果找到一个 item,则返回 item 从尾向前检索第一个次出现在数组的位置。数组的索引开始位置是从 0 开始的。

如果在数组中没找到指定元素则返回 -1。

*** 2.语法 ***

array.indexOf(item,start)

返回值:number,元素在数组中的位置,如果没与搜索到则返回 -1

array.lastIndexOf(item,start)

返回值:number,元素在数组中的位置,如果没与搜索到则返回 -1

*** 3.参数 ***

item 必须。规定需检索的字符串值。 start 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0-(stringObject.length - 1)。

如省略start该参数,indexof则将从字符串的首字符开始检索。lastIndexof则将从字符串的最后一个字符开始检索。

*** 数组合并 填充 复制方法***

*** concat() ***

*** 1.定义用法 ***

concat() 方法用于连接两个或多个数组。

该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

*** 2.语法 ***

array1.concat(array2,array3,...,arrayX)

返回值:返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。

*** 3.参数 ***

array2, array3, ..., arrayX 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。

*** 4.示例代码 ***

合并三个数组的值:

var hege = ["Cecilie", "Lone"];
var stale = ["Emil", "Tobias", "Linus"];
var kai = ["Robin"];
var children = hege.concat(stale,kai);
children 输出结果:

Cecilie,Lone,Emil,Tobias,Linus,Robin

*** fill() ***

*** 1.定义用法 ***

fill() 方法用于将一个固定值替换数组的元素

*** 2.语法 ***

array.fill(value, start, end)

返回值:返回一个新的数组。

*** 3.参数 ***

value 必需。填充的值。 start 可选。开始填充位置。 end 可选。停止填充位置 (默认为 array.length)

*** 4.示例代码 ***

使用固定值填充数组:
var fruts = ["Banana", "Orange", "Apple", "Mango"];
fruits.fill("Runoob");
fruits 输出结果:
Runoob,Runoob,Runoob,Runoob

*** copyWithin() ***

*** 1.定义用法 ***

copyWithin() 方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中。

*** 2.语法 ***

array.copyWithin(target, start, end)

*** 3.参数 ***

target 必需。复制到指定目标索引位置。 start 可选。元素复制的起始位置。 end 可选。停止复制的索引位置 (默认为 array.length)。如果为负值,表示倒数。

*** 4.示例代码 ***

复制数组的前面两个元素到第三和第四个位置上:

var fruits = ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Papaya"];
fruits.copyWithin(2, 0, 2);
输出结果:

Banana,Orange,Banana,Orange,Kiwi,Papaya

*** Array.from() ***

*** 1.定义用法 ***

Array.from() 方法从一个类似数组或可迭代对象中创建一个新的,浅拷贝的数组实例。

*** 2.语法 ***

Array.from(arrayLike[, mapFn[, thisArg]])

*** 3.参数 ***

arrayLike 想要转换成数组的伪数组对象或可迭代对象。 mapFn (可选参数) 如果指定了该参数,新数组中的每个元素会执行该回调函数。 thisArg (可选参数) 可选参数,执行回调函数 mapFn 时 this 对象。

返回 一个新的数组实例

*** 4.示例代码 ***

console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]