写在前面:续接上篇 JavaScript 数组 常用方法

数组常用方法第二弹来了;

some && every

描述:

every()与some()方法都是JS中数组的迭代方法。

  • some方法对数组中每个元素调用被提供的函数,如果有任何一个元素结果为 true 则返回 true 否则返回false
  • every方法对数组中每个元素调用被提供的函数,如果所有元素结果为 true 则返回 true 否则返回false
  • some一直在找符合条件的值,一旦找到,则不会继续迭代下去。
  • every从迭代开始,一旦有一个不符合条件,则不会继续迭代下去。

注意:如果用一个空数组对两个方法进行测试:

  • _some_在任何情况下它返回的都是_false_
  • _every_在任何情况下它返回的都是_true_

语法:

两个方法的语法是一样的,只是返回的结果不同。

Array.some(callback(element, index, array), thisValue)
Array.every(callback(element, index, array), thisValue)

参数:

两个函数的参数是一样的。

callback与thisValue

参数 是否可选 描述
参数一 callback 必选 用来测试数组的每个元素的函数
参数二 thisValue 可选 执行 callback 时,用于 this 的值。
对象作为该执行回调时使用,传递给函数。
如果省略了 thisValue ,"this" 的值为 "undefined"
  1. callback的参数列表
参数 是否可选 描述
参数一 element 必选 当前元素
参数二 index 可选 当前元素的索引值
参数三 array 可选 调用了 some && every 的数组本身
  1. thisValue的参数

可选。要传递给函数以用作其 "this" 值的值。
如果此参数为空,则值 "undefined" 将作为其 "this" 值传递。

返回值:

返回值为布尔(Boolean)值,

  • _some_如果有任何一个元素结果为 true 则返回 true 否则返回false
  • _every_如果所有元素结果为 true 则返回 true 否则返回false

示例:

const Array = [
{ name: "孙悟空", age: 3 },
{ name: "猪八戒", age: 4 },
{ name: "沙和尚", age: 5 },
]; // 检查数组中是否有人 age 为 4
let some = Array.some(
(item) => {
return item.age === 4;
}
); // 检查数组中是否所有人 age 为 4
let every = Array.every(
(item) => {
return item.age === 4;
}
);
console.log(some); // true
console.log(every); // false

细节:

some && every 遍历的元素范围在第一次调用 callback 之前就已确定了。

在调用 some && every 之后添加到数组中的元素不会被 callback 访问到。如果数组中存在的元素被更改,则他们传入 callback 的值是some && every 访问到他们那一刻的值。那些被删除的元素或从来未被赋值的元素将不会被访问到。

find && findIndex

描述:

find()与findIndex()方法都是JS中数组用来查找目标元素的方法。

  • find()方法对数组中每个元素调用被提供的函数,如果满足该函数,就返回满足该函数的第一个元素的值,否则返回undefined
  • findIndex()方法对数组中每个元素调用被提供的函数,如果满足该函数,就返回满足该函数的第一个元素的索引值,否则返回-1

简单来说:

  • find()方法用来查找目标元素,找到就返回该元素,找不到返回undefined
  • findIndex()方法查找目标元素,找到就返回元素的位置,找不到就返回-1

这两个方法区别在于返回值,一个返回数组中找到的元素的值,一个返回数组中找到的元素的索引。

语法:

两个方法的语法是一样的,只是返回的结果不同。

Array.find(callback(element, index, array), thisValue)
Array.findIndex(callback(element, index, array), thisValue)

参数:

两个方法的参数是一样的。
callback与thisValue

参数 是否可选 描述
参数一 callback 必选 用来测试数组的每个元素的函数
参数二 thisValue 可选 执行 callback 时,用于 this 的值。
对象作为该执行回调时使用,传递给函数。
如果省略了 thisValue ,"this" 的值为 "undefined"
  1. callback的参数列表
参数 是否可选 描述
参数一 element 必选 当前元素
参数二 index 可选 当前元素的索引值
参数三 array 可选 调用了 find && findIndex 的数组本身
  1. thisValue的参数

可选。要传递给函数以用作其 "this" 值的值。
如果此参数为空,则值 "undefined" 将作为其 "this" 值传递。

返回值:

返回值不同:

  • find返回满足所提供函数的第一个元素的值,否则返回undefined
  • findIndex返回满足所提供函数的第一个元素元素的索引,否则返回-1

示例:

const Array = [
{ name: "孙悟空", age: 3 },
{ name: "猪八戒", age: 4 },
{ name: "沙和尚", age: 5 },
]; // 查找数组中 age 为 4 的值
let find = Array.find(
(item) => {
return item.age === 4;
}
); // 查找数组中 age 为 4 元素的索引
let findIndex = Array.findIndex(
(item) => {
return item.age === 4;
}
); console.log(find); // { name: "猪八戒", age: 4 } 返回值为 value
console.log(findIndex); // 1 返回值为 索引值

细节:

find && findIndex方法在第一次调用callback函数时会确定元素的索引范围

find && findIndex方法开始执行之后添加到数组的新元素将不会被callback函数访问到。如果数组中一个尚未被callback函数访问到的元素的值被callback函数所改变,那么当callback函数访问到它时,它的值是将是根据它在数组中的索引所访问到的当前值。被删除的元素仍然会被访问到。

slice && splice

描述:

slice()splice()方法都是JS中数组用来删除数组元素并返回操作结果。

  • slice() 方法以新的数组对象,返回数组中被选中的元素。
  • splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。

splice用法不仅仅是删除,它还能够实现对数组元素的删除、插入、替换操作,返回值为被操作的值。

️注意:_splice会导致数组塌陷。数组塌陷:使用splice删除元素时,剩余的数组元素索引的顺序会改变。

语法:

两个方法的语法是不一样的。

Array.slice(begin, end);
Array.splice(start, deleteCount, item1, item2, ... ,itemx);

参数:

两个方法的参数是不一样的。在 MDN 中这些参数是这样描述的:

slice()的参数:

begin 与 end

参数 是否可选 描述
参数一 begin 可选 提取起始处的索引(从 0 开始)从该索引开始提取原数组元素
参数二 end 可选 提取终止处的索引(从 0 开始)在该索引处结束提取原数组元素
  1. begin

    • 提取起始处的索引(从 0 开始),从该索引开始提取原数组元素。
    • 如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
    • 如果省略 begin,则 slice 从索引 0 开始。
    • 如果 begin 超出原数组的索引范围,则会返回空数组。
  2. end
    • 提取终止处的索引(从 0 开始),在该索引处结束提取原数组元素。slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end)。
    • slice(1,4) 会提取原数组中从第二个元素开始一直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。
    • 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
    • 如果 end 被省略,则 slice 会一直提取到原数组末尾。
    • 如果 end 大于数组的长度,slice 也会一直提取到原数组末尾。

splice()的参数

start 与 deleteCount 与 item1, item2, ..., itemx

参数 是否可选 描述
参数一 start 必选 指定修改的开始位置(从0计数)
参数二 deleteCount 可选 整数,表示要移除的数组元素的个数。
参数三 item1, item2, ..., itemx 可选 要添加进数组的元素,从start 位置开始。
  1. start

指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于(array.length-n);如果负数的绝对值大于数组的长度,则表示开始位置为第0位。

  1. deleteCount

    • 整数,表示要移除的数组元素的个数。
    • 如果 deleteCount 大于 start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
    • 如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,如果它大于或者等于start之后的所有元素的数量),那么start之后数组的所有元素都会被删除。
    • 如果 deleteCount 是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素。
  2. item1, item2, ..., itemx

要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。

返回值:

返回值不同:

  • slice 一个含有被提取元素的新数组。
  • splice 由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。

示例:

const Array = [
{ name: "孙悟空", age: 3 },
{ name: "猪八戒", age: 4 },
{ name: "沙和尚", age: 5 },
]; // 查找数组中 age 为 4 的值
const slice = Array.slice(0, 2); // 查找数组中 age 为 4 元素的索引
const splice = Array.splice(0, 0, { name: "唐僧", age: 2 }); console.log(slice);
/*
{ name: "孙悟空", age: 3 },
{ name: "猪八戒", age: 4 },
*/ console.log(splice); // 【】//向数组中增加一个元素 console.log(Array); //
/*
{ name: "唐僧", age: 2 }
{ name: "孙悟空", age: 3 },
{ name: "猪八戒", age: 4 },
{ name: "沙和尚", age: 5 },
*/

细节:

  • slice 如果向两个数组任一中添加了新元素,则另一个不会受到影响。

但如果是原数组中有一是个对象引用(不是实际的对象)slice会拷贝这个对象引用到新的数组里,两个对象引用是相同的,那么被引用的对象改变,则新的和原数组中的这个元素也会发生改变。

  • splice 如果添加进数组的元素个数不等于被删除的元素个数,数组的长度会发生相应的改变。

方法列表

方法属性:

方法 改变原数组 返回值描述 描述
some() 布尔值 检查数组。
every() 布尔值 检查数组。
find() 所查找到的值 查找目标元素。
findindex() 所查找到的值的索引值 查找目标元素。
slice() 一个含有被提取元素的新数组 删除数组元素。
splice() 被删除的元素组成的一个数组 删除数组元素。

JavaScript 数组 常用方法(二)的更多相关文章

  1. JavaScript数组常用方法解析和深层次js数组扁平化

    前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...

  2. JavaScript数组(二)实例

    一.Js 数组示例常用操作. $(function () { Javascript数组学习 var nums = new Array([10], [5],[ 8], [2], [3]); 数组反转 n ...

  3. javascript 数组 常用方法

    前言  学学忘忘  闲来做个笔记 整理下数组常用方法. Array 数组常用方法  创建数组的基本方式有两种    1.第一种是使用Array构造函数,  var arr = new Array(); ...

  4. Javascript数组系列二之迭代方法1

    我们在<Javascript数组系列一之栈与队列 >中介绍了一些数组的用法.比如:数组如何表现的和「栈」一样,用什么方法表现的和「队列」一样等等一些方法,因为 Javascript 中的数 ...

  5. Javascript数组常用方法

    一.forEach对数组的遍历 二.map返回经过运算的新数组 三.filter返回满足条件的新数组 四.返回数组前后元素运算的结果 五.every遍历数组每项元素是否满足某个条件,全部满足返回tru ...

  6. javascript数组常用方法汇总

    1.join()方法: Array.join()方法将数组中所以元素都转化为字符串链接在一起,返回最后生成的字符串.也可以指定可选的字符串在生成的字符串中来分隔数组的各个元素.如果不指定分隔符,默认使 ...

  7. javascript数组常用方法详解

    1,splice().   array.splice(index,many,list1,list2....)  参数1.index位置 负数为从结尾处算,倒数第一为-1:参数2,many要删除的项目, ...

  8. JavaScript 数组(二)数组练习

    1.求一组数中的最大值和最小值,以及所在位置(最大值和最小值在这组数中的位置) var numbers = [120, 13, 101, 88, 10, 25]; var max = numbers[ ...

  9. Javascript数组系列五之增删改和强大的 splice()

    今天是我们介绍数组系列文章的第五篇,也是我们数组系列的最后一篇文章,只是数据系列的结束,所以大家不用担心,我们会持续的更新干货文章. 生命不息,更新不止! 今天我们就不那么多废话了,直接干货开始. 我 ...

随机推荐

  1. vue 点击复制当前网址

    template 部分 <div  class="NewNoticeDetails-ctrlButton" @click="copy()">     ...

  2. Mybatis-Plus - 条件构造器 QueryWrapper 的使用

    目录 前言 查询示例 基础代码 QueryWrapper 的基本使用 QueryWrapper 的lambada写法 LambadaQueryWrapper 的使用 LambdaQueryChainW ...

  3. ThreadLocal原理简单刨析

    ThreadLocal原理简单刨析 ThreadLocal实现了各个线程的数据隔离,要知道数据是如何隔离的,就要从源代码分析. ThreadLocal原理 需要提前说明的是:ThreadLocal只是 ...

  4. 源码解析.Net中Host主机的构建过程

    前言 本篇文章着重讲一下在.Net中Host主机的构建过程,依旧延续之前文章的思路,着重讲解其源码,如果有不知道有哪些用法的同学可以点击这里,废话不多说,咱们直接进入正题 Host构建过程 下图是我自 ...

  5. GDAL的基本操作

    上一节简单介绍了GDAL,这一节将介绍一些GDAL的基本操作,如影像读写.波段提取.波段合成等.代码均用python编写. 1.遥感影像的读写 众所周知,遥感影像是以栅格形式存储的,GDAL中使用da ...

  6. ARP原理和常见分类

    路由器一个重要功能是隔离广播域.就是不转发广播包,而ARP请求就是个广播包===> arp 代理 1. ARP交互流程: (1)目的地址和主机在同一个网段(A-C): A ----------- ...

  7. ASP.NET Core Web API 教程 - Project Configuration

    ASP.NET Core Web API 教程 本系列文章主要参考了<Ultimate ASP.NET Core 3 Web API>一书,我对原文进行了翻译,同时适当删减.修改了一部分内 ...

  8. Selenium系列4-元素定位

    前言 说起元素定位,一定是学习自动化测试绕不开的第一道关,无论是web端的UI自动化还是移动端的自动化,在需要首先对元素进行定位才可以完成对元素的操作已达成测试目的,在Selenium中,可以使用fi ...

  9. [闻缺陷则喜]关于boost的想法

    公司有个大约2万行的项目,用到了boost,我想取消掉不用boost.理由:一,可理解性差,除了高手很难弄懂.二,类太多,光头文件就1万多.大点的团队四五个高手,每人用一个boost类.高手流失后,很 ...

  10. input竖直的输入框,文字从上到下排列

    有的时候可能会有这样的需求,一个竖直的输入框,输入信息,文字也是从上到下排列: (但是在移动端或用轮播swiper时不起作用,可以用textarea代替input) <!DOCTYPE html ...