<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p>
讯享网
作用:添加、删除和插入元素
语法:
它从索引 start 开始修改 arr:删除 deleteCount 个元素并在当前位置插入 elem1, …, elemN。最后返回被删除的元素所组成的数组。
arr.splice(start[, deleteCount, elem1, …, elemN])
删除:(注:当只填写了 splice 的 start 参数时,将删除从索引 start 开始的所有数组项)
讯享网
删除并添加元素:
插入元素而不删除任何元素:(deleteCount 设置为 0)
讯享网
作用:截取某一范围到新数组
语法:
将所有从索引 start 到 end(不包括 end)的数组项复制到一个新的数组。
arr.splice(start[, deleteCount, elem1, …, elemN])
例子:
注:不带参数地调用它:arr.slice() 会创建一个 arr 的副本。其通常用于获取副本,以进行不影响原始数组的进一步转换。
应用场景
复制和排序数组:我们有一个字符串数组 arr。我们希望有一个排序过的副本,但保持 arr 不变。 创建一个函数 copySorted(arr) 返回这样一个副本。
我们可以使用 slice() 来创建一个副本并对其进行排序:
讯享网
作用:创建一个新数组,其中包含来自于其他数组和其他项的值
语法:
结果是一个包含来自于 arr,然后是 arg1,arg2 的元素的新数组。
arr.concat(arg1, arg2…)
它接受任意数量的参数 —— 数组或值都可以。
如果参数 argN 是一个数组,那么其中的所有元素都会被复制。否则,将复制参数本身。
例子:
通常,它只复制数组中的元素。其他对象,即使它们看起来像数组一样,但仍然会被作为一个整体添加:
讯享网
但是,如果类数组对象具有 Symbol.isConcatSpreadable 属性,那么它就会被 concat 当作一个数组来处理:此对象中的元素将被添加:
作用:遍历
语法:
arr.forEach(function(item, index, array) {
// … do something with item
});
例子:
讯享网
注意事项:
1、 forEach() 方法不创建新的数组而且返回值是undefined,数组中的每个元素调用回调函数的返回值也是undefined。
2、不支持break
3、使用return无效
4、forEach只能默认从索引0开始遍历
5、forEach删除自身元素index不会被重置
(for循环过程中支持修改索引(修改 i),但forEach做不到(底层控制index自增,我们无法左右它)
讯享网
原数组并没有发生改变。
例2:
这里修改item的值,依然没有修改原数组。
例3:
讯享网
当修改数组中对象的某个属性时,发现属性改变了。
综上:为什么会这样呢?
这里就要引入栈内存和堆内存的概念了,对于JS中的基本数据类型,如String,Number,Boolean,Undefined,Null是存在于栈内存中的,在栈内存中储存变量名及相应的值。而Object,Array,Function存在于堆内存中,在堆内存中储存变量名及引用位置。
在第一个例子中,为什么直接修改item无法修改原数组呢,因为item的值并不是相应的原数组中的值,而是重新建立的一个新变量,值和原数组相同。
在第二个例子中,数组中的对象的值也没有改变,是因为新创建的变量和原数组中的对象虽然指向同一个地址,但改变的是新变量的值,即新对象的值为2,原数组中的对象还是{num:1}。
在第三个例子中,由于对象是引用类型,新对象和旧对象指向的都是同一个地址,所以新对象把num变成了2,原数组中的对象也改变了。
正确改动原数组写法:
这个例子和例三其实同理,参数中的arr也只是原数组的一个拷贝,如果修改数组中的某一项则原数组也改变因为指向同一引用地址,而如果给参数arr赋其他值,则原数组不变。
=========================================================
补充:e.children是个对象,不能用forEach遍历!!!
还有vue的应用,还没学呜呜呜先不看了
作用:当数组元素是基本数据类型时,来查找搜索更方便
语法:
arr.indexOf(item, from) —— 从索引 from 开始搜索 item,如果找到则返回索引,否则返回 -1。
arr.includes(item, from) —— 从索引 from 开始搜索 item,如果找到则返回 true(译注:如果没找到,则返回 false)。
注:通常使用这些方法时只会传入一个参数:传入 item 开始搜索。默认情况下,搜索是从头开始的。
例子:
讯享网
请注意,indexOf 和 includes 使用严格相等 === 进行比较。所以,如果我们搜索 false,它会准确找到 false 而不是数字 0。
上述两种方法一般用于简单数组,即不是对象数组这种一层包一层的。如果我们想检查数组中是否包含元素 item,并且不需要知道其确切的索引,那么 arr.includes 是首选。
方法 includes 可以正确的处理 NaN 方法
includes 的一个次要但值得注意的特性是,它可以正确处理 NaN,这与indexOf 不同:const arr = [NaN];
alert( arr.indexOf(NaN) ); // -1(错,应该为 0)
alert(arr.includes(NaN) );// true(正确)
这是因为 includes 是在比较晚的时候才被添加到 JavaScript中的,并且在内部使用了更新了的比较算法。
作用:当数组元素是复杂数据类型时,如对象数组查找搜索特定条件的对象
语法:
let result = arr.find(function(item, index, array) {
// 如果返回 true,则返回 item 并停止迭代(即只返回第一个匹配的元素)
// 对于假值(falsy)的情况,则返回 undefined
});
讯享网
作用:范围的匹配,返回所有匹配元素组成的数组
语法:
let results = arr.filter(function(item, index, array) {
// 如果 true item 被 push 到 results,迭代继续
// 如果什么都没找到,则返回空数组
});
例子:
作用:它对数组的每个元素都调用函数,并将处理后的值返回给结果数组。
语法:
let result = arr.map(function(item, index, array) {
// 返回新值而不是当前元素
})
例子:
讯享网
作用:arr.sort 方法对数组进行原位排序,更改元素的顺序。
语法:
let arr = [ 1, 2, 15 ];
// 该方法重新排列 arr 的内容
arr.sort();
alert( arr ); // 1, 15, 2
这些元素默认情况下被按字符串进行排序。
故需自己提供一个函数
作用:反转arr中元素的顺序
例子:
讯享网
作用:通过给定的分隔符将字符串分割成一个数组。
例子:
split 方法有一个可选的第二个数字参数 —— 对数组长度的限制。如果提供了,那么额外的元素会被忽略。但实际上它很少使用:
讯享网
可将字符串拆分成字母数组:
作用:将数组粘成字符串
例子:
讯享网
作用:累加
语法:
arr.reduce(callback(accumulator, currentValue,index, array),initialValue)
accumulato:上一次回调函数返回的累积值
currentValue:当前元素
index:当前元素索引值
array:调用reduce()的数组
reduce()方法initialValue参数:
initialValue: 第一次调用 callback函数时的第一个参数accumulator的值,如果没有提供初始值,则将使用数组中的第一个元素作为初始值
例子:
讯享网
所以建议始终指定初始值。
1、有这样一组学生数据,按需求完成工作。
(1)将学生的信息整理成’学号+下划线+名字’,输出给老师
讯享网

(2)将学生的’学号+下划线+名字’,变成学生的id,存储进原来的students数据中

(3)筛选出这些学生中的已经成年的学生
讯享网

(4)根据学号找出学生资料
(5)找出这些学生们年龄的分布并排序
讯享网
(6)计算出这些学生们的平均年龄
(7)统计出这些学生们各个年龄的人数
讯享网
=======================================================================
1、将诸如 “my-short-string” 之类的字符串由短划线分隔的单词变成骆驼式的 “myShortString”。
2、原位过滤范围:写一个函数 filterRangeInPlace(arr, a, b),该函数获取一个数组 arr,并删除其中介于 a 和 b 区间以外的所有值。检查:a ≤ arr[i] ≤ b。
该函数应该只修改数组。它不应该返回任何东西。
解:只能修改原数组,所以不能用filter;而涉及到数组的元素删减,也不能用forEach,故只能用for循环。
讯享网
3、我们有一个字符串数组 arr。我们希望有一个排序过的副本,但保持 arr 不变。
创建一个函数 copySorted(arr) 返回这样一个副本。
4、你有一个 user 对象数组,每个对象都有 user.name。编写将其转换为 names 数组的代码。
讯享网
5、你有一个 user 对象数组,每个对象都有 name,surname 和 id。编写代码以该数组为基础,创建另一个具有 id 和 fullName 的对象数组,其中 fullName 由 name 和 surname 生成。
6、按年龄对用户排序:编写函数 sortByAge(users) 获得对象数组的 age 属性,并根据 age 对这些对象数组进行排序。
讯享网
7、假设我们收到了一个用户数组,形式为:{id:…, name:…, age:… }。
创建一个函数 groupById(arr) 从该数组创建对象,以 id 为键(key),数组项为值。
处理服务端数据时,这个函数很有用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/205090.html