js数组详解(未完)

这有5个纯函数,8个遍历方法,25个array方法,3个Array方法。

  1.5个纯函数

  array.map()

  数组map方法,用于数组遍历,每遍历一个元素就调用回调方法一次,并且将回调函数

  的返回结果作为新数组的元素,被遍历的数组不会被改变。map里面的处理函数会接受

  三个参数,分别代表当前元素,当前元素的索引,数组本身。

  array.filter()

  数组过滤方法,和mapquiet在于filter把传入的函数依次作用于每个元素,然后根据

  返回值是TRUE还是FALSE决定是保留元素还是丢弃元素。

  array.concat(item...)

  函数返回由当前数组和其他项组合而成的新数组,返回值是数组类型,这个方法不会改变

  原数组,只有函数的返回值才是添加元素后的新数组。参数有两个,第一个item(任意类型

  添加到当前数组末尾处的数据项。)注意: 如果参数为数组类型 (Array), 则将该参

  数数组中的所有元素依次拼接到当前数组的末尾; 如果是其他类型, 则将其本身作为

  元素添加到当前数组的末尾处。

  array.slice(start, end)

  数组的截取方法,不会改变原数组,而是返回一个子数组。如果start或end是负数,代表

  数组的倒数位置的数。

  array.sort(compareFn)

  sort方法其实是要把排序的内容转化为string(调用toString()),然后按照字符串的

  第一位ascii码先后顺序进行比较,不是数字。

  2.8个遍历方法

  array.every()

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

  使用制定函数检测数组中的所有元素,如果数组中有一个不符合条件,则整个表达式返回

  FALSE,剩余元素不在检测,若所有元素都符合条件,返回TRUE,它不会改变原数组,不会

  对空数组检测。

  array.forEach()

  forEach只能用于数组,数组遍历,它可以传两个参数,第一个参数必须传,是function(ele,index,self)

  ele代表数组中的数据,index代表索引,self代表数组本身,第二个参数可有可无。forEach不支持在循环中添加和删除操作。

  在数组定义的时候省略的元素不会在forEach遍历的时候列出,但是手动赋值为undefined

  array.find()

  find方法返回数组中第一个满足回调函数测试的第一个元素的值,否则返回undefined

  两个参数,第一个,执行回调函数,第二个,指定回调函数的this对象

  find对于空数组,函数是不会执行的,find并没有改变数组的原始值

  array.findIndex()

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

  findIndex方法为数组中的每一个元素都调用一次函数执行:当数组中的元素在测试条件时返回

  TRUE,findIndex()返回符合条件的元素的索引位置,之后的值不会在调用执行函数;如果没有

  符合条件的元素返回-1.

  findIndex对于空数组是不会执行的,它也不会改变原数组

  array.filter()

  array.sort()

  array.some()

  some方法会依次执行数组中的每一个元素,如果有一个元素满足条件,则表达式返回TRUE,剩余的

  元素不会在执行检测,如果没有满足条件的就返回FALSE

  它不会对空数组进行检测。它不会改变原数组。两个参数,第一个函数,第二个thisValue

  ,第二个值是可选的,对象作为该执行回调时使用,传递给函数,用作this值,如果省略了

  thisValue,this的值是undefined

  array.map()

  3.25个array方法

  concat()    连接两个数组并返回一个新数组

  let myArr = new Array('1','2','3');
   let myArr1 = myArr.concat('a','b','c');
   console.log(myArr1);

  join()

  这个方法功能就是将array数据中每个元素都转为字符串,用自定义的连接符分割,如果join里面

  不加任何参数,用法和toString一样。join方法的参数代表的连接字符串的连接符

let myArr = new Array('1','2','3');
  console.log(typeof myArr.join());
  console.log( myArr.join());
  console.log(myArr.join('-'));
  let myArr1 = new Array('zhangyongxian');
  console.log(myArr1.join());

  pop() 从数组移出最后一个元素,并返回该元素

  push() 在数组末尾添加一个或者多个元素,并返回数组操作后的长度

  reverse

  shift()  从数组移出第一个元素,并且返回该元素。

  unshift() 在数组开头添加一个或者多个元素,并且返回数组的新长度。

  slice()  从数组提取一个片段,并作为一个新的数组返回。

        函数有2个参数,在截取时,第一个是开头位置(新数组包含),第二个是结束位置(新数组不包含),如果没有写截断参数,则将整个数组全部截取。

 let myArr = new Array('1', '2', '3', '1', '2', '3', '1', '2', '3');
    console.log(myArr.slice(3, 8)); 

  splice()  可以实现增删改查操作。(有个小案例,数组移动函数实例)

function move (array,from,to){
      // 判断开始位置和结束位置不能超出范围
      if(from < 0 || to >= array.length){
        console.error("参数错误");
        return 
      }
      const newArr = [...array]; //创建一个新的数组
      let item = newArr.splice(from,1);
      newArr.splice(to,0,...item);
      return newArr;
    }
    let myArr = [1,2,3,4,5,6]
    console.table(move(myArr,1,3))
删除操作
1 let arr = ["I", "study", "JavaScript"];
2 
3 let b = arr.splice(1, 1); // 从索引 1 开始删除 1 个元素
4 
5 alert( arr ); // ["I", "JavaScript"]
6 
7 alert( b ); //["study"]
插入操作
let arr = ["I", "study", "JavaScript"];

// 从索引 2 开始
// 删除 0 个元素
// 然后插入 "complex" 和 "language"
arr.splice(2, 0, "complex", "language");

alert( arr ); // "I", "study", "complex", "language", "JavaScript"
替换操作
 let arr = [1,2,6,7,5]

 arr.splice(2,2,3,4) //将从下标2开始(包括2)的2个元素替换为3,4
        
 alert(arr)

 sort()数组排序

sort()也可以带一个回调函数决定怎么比较数组元素。这个回调函数比较2个值,并且返回3个值中的一个。

原理:

let arr = [1,2,3,4,5,6];
    function sort(array,callback){
      for(const n in array){
        for(const m in array){
          if(callback(array[n],array[m]) <0){
            const temp = array[n];
            array[n] = array[m];
            array[m] = temp;
          }
        }
      }
      return array
    }
    arr = sort(arr,function(a,b){
      // return b-a; 从大到小排序
      return a-b; //从小到大排序
    })
    console.log(arr);

  find

  findIndex

  fill

  copeWithin

  filter()

        原理:

let hd = [1,2,3,4];
function filter(array,callback){
    let newArr = []
for(const value of array){
if(callback(value) === true){
newArr.push(value)
        }
    }
}

  map

  forEach

  every

  some

  keys

  Object.keys()返回一个对象的自身可枚举属性组成的数组,这个对象可以是字符串,数组,对象等

  keys() 方法返回一个包含数组中每个索引键的Array Iterator对象(一个新的Array迭代器对象)。

  values()

        values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值

const array1 = ['a', 'b', 'c'];
const iterator = array1.values();
for (const value of iterator) {
  console.log(value); // expected output: "a" "b" "c"
}

  entries

  返回一个数组的迭代对象,该对象包含数组的键值对(key(迭代对象中数组的索引值)/value(迭代对象中数组元素值))

  indexOf()

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

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

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

提示如果你想查找字符串最后出现的位置,请使用 lastIndexOf() 方法

  includes

  includes方法用来判断数组中是否包含一个指定的值,根据情况,是就返回TRUE,否则返回FALSE

  两个参数,第一个是需要查找的元素,第二个fromindex,开始查找位置的索引,默认0

  reduce()

第一个参数就是上一次调用回调返回的值,或者是提供的初始值。第二个参数就是遍历数组的值,其实我们再项目开发当中大多做的事情就是对数组中每个json对象所进行的操作

var items = [10, 120, 1000];
var total = items.reduce((sumSoFar, item) => {
	return sumSoFar + item;
}, 0);

console.log(total); // 1130


var items = [10, 120, 1000];
var total = items.reduce((sumSoFar, item) => {
	return sumSoFar.sum + item;
}, {sum: 0});

console.log(total); // {sum:1130}

  4.三个Array方法

  Array.of()

        Array.of()方法的作用是将一组值转变为数组,参数是要转换成数组的值,返回值是新的数组实例。

let arr=Array.of(1,3,'123',true);
console.log(arr);//[1, 3, "123", true]

  Array.from()

  类数组对象,所谓类数组对象最基本要求就是具有length属性对象。

  Array.from方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。Array.from有三个参数

Array.prototype.slice.call(arguments)

我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)

不会的可以去看这篇文章

Array.prototype.slice.call(arguments) - 肥杜 - 博客园我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,jshttps://www.cnblogs.com/littledu/archive/2012/05/19/2508672.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值