这篇文章主要介绍了js实现从数组里随机获取元素的方法,以及个人封装的js代码分享,十分的实用,这里推荐给小伙伴们
基础知识:
复制数组:
(1)循环遍历复制(不推荐)
代码如下:
var
arry
=
[1,5,9,7],
new_arry
=
[],
n
=
0,
len
=
arrylength;
for(;n<len;n++){
new_arrypush(arry[n]);
}
(2)concat()
方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
代码如下:
var
arry
=
[1,5,9,7],
new_arry
=
arryconcat();
consolelog(new_arry);
(3)slice()
方法可从已有的数组中返回选定的元素
代码如下:
var
arry
=
[1,5,9,7],
new_arry
=
arryslice(0);
consolelog(new_arry);
随机数:
Mathrandom()
Mathrandom(),返回0到1的随机数,如:04261967441998422
个人封装函数:
代码如下:
function
getRandom(opt)
{
var
old_arry
=
optarry,
range
=
optrange;
//防止超过数组的长度
range
=
range
>
old_arrylengthold_arrylength:range;
var
newArray
=
[]concat(old_arry),
//拷贝原数组进行 *** 作就不会破坏原数组
valArray
=
[];
for
(var
n
=
0;
n
<
range;
n++)
{
var
r
=
Mathfloor(Mathrandom()
(newArraylength));
valArraypush(newArray[r]);
//在原数组删掉,然后在下轮循环中就可以避免重复获取
newArraysplice(r,
1);
}
return
valArray;
}
var
new_val
=
getRandom({'arry':[1,6,8,0,3],'range':3});
consolelog(new_val);
是不是很好用呢,非常实用的代码,这里是从本人项目中分离出来分享给大家,希望对大家有所帮助。
用来遍历数组中的每一项
过滤原数组,返回符合条件的新数组
用于在数组中查找满足条件第一次出现的位置,找到返回索引,找不到返回-1
用于查找数组中满足条件的第一个元素,找到返回元素,找不返回undefined
用于查找数组中是否有一个元素满足条件的,返回值为true/false
用于查找数组中元素是否全都满足条件,返回值为true/false
对原数组的每一项根据条件 *** 作返回新数组
这个方法接收两个参数:
要执行的函数中也可传入参数,分别为
prev:上次调用函数的返回值
cur:当前元素
index:当前元素索引
arr:被遍历的数组
函数迭代的初始值
①对数组的每一项累加求和
②返回数组中最大值
③数组去重
④计算数组中,每个元素出现的次数
可以用find或filter方法:
find:(返回符合条件的第一个元素,返回值是单个对象)
var obj=arrsfind(e=>eFNo=='50228888');
filter:(返回符合条件的所有元素,返回值是数组)
var arr=arrsfilter(e=>eFNo=='50228888');
相同点:使用语法相同 均不改变原数组
arrayfilter(function(value, index, arr),thisValue)
arrayfind(function(value, index, arr),thisValue)
value:必须 代表当前元素 index:可选 当前元素索引
arr:可选 当前数组 thisValue:传递给函数的值,一般用this值,为空时undfined传给this
不同点:find 从数组中查找符合条件的第一个元素并返回。filter从数组中查找符合条件的所有元素并返回数组。
举例:
所以,当查找数组中符合条件的所有元素时用filter,查找数组中符合条件的第一个元素用find。
简单的遍历 *** 作,没有返回值
简单的遍历 *** 作,没有返回值
对数组进行筛选,返回满足条件的数据
对数组进行条件判断,返回布尔值 && (全部满足为true,有一个不满足则返回false)
对数组进行处理,返回处理后的数据
判断数组元素,只要有一个满足条件就返回true
直接给一个新的数组里面,利用es6的延展运算符
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。item是当前元素的值,index是当前元素的索引值。indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。利用indexOf() 查询到数组的下标,看是否等于当前的下标,相等的话就返回,否则不返回值。
5、借助新数组 通过 indexOf 方法判断当前元素在数组中的索引,如果与循环的下标相等则添加到新数组中
6、利用双重for循环
7、利用includes实现数组去重
以上就是比较常用的七种方法了,有不懂的留言吧。
js获取数组中的一部分元素,有2种方法:slice和filter函数,下面分别介绍。
sliceslice的定义和用法如下,用于截取数组的一段
执行
var arr = [1,2,3,4,5];
arrslice(1,4);
这2行代码,可以看到截取了1到4下标的代码
filterfilter则用于过滤数组中的一部分元素,剩下的元素就是需要的那部分元素。
现在尝试下面代码,可以将一个数字数组中的偶数过滤掉,只留下奇数。
var arr = [1,2,3,4,5];
arrfilter(e=>e%2==0)
数组的创建方式
1字面量的形式: var arr=[1,2,3];
1构造函数: var arr1=new Array();//不常用
Array构造函数有一个很大的缺陷,就是不同的参数,会导致它的行为不一致。
1单个数值作为参数,参数表示数组的元素个数
可以看到,Array作为构造函数,行为很不一致。因此,不建议使用它生成新数组,直接使用数组字面量是更好的做法。
push/pop/unshift/shift//增加、删除元素 (数组的方法,所以使用时应调用
数组名方法名())
arr slice/splice//截取元素
arrslice(); 原数组不发生改变
无参数时,返回原数组,相当于数组的复制。
一个参数时,从参数作为下标的元素截取,至数组结束。
二个参数时,从第一个参数作为下标(索引)的元素开始截取,到第二个参数作为下标的元素结束,但不包括第二个参数作为下标的函数。 (起始元素包含,结尾元素不包含)
多个参数时,前两个参数起效,后边的参数无效。
arrsplice(); 原数组改变
无参数时,返回空数组。
一个参数时,从参数作为下标的元素截取,至数组结束。
二个参数时,从第一个参数作为下标(索引)的元素开始截取,即表示截取的起始位置,第二个参数表示截取的元素个数。
多个参数时,前两个参数起效,后边的参数从原数组的截取起始位置开始填充,填充到原数组。
reverse/sort//改变元素位置
arrreverse(); //数组翻转(元素位置颠倒)
arrsort(); 从小到大排序,但遵循的是字符串的按位比较规则,所以排序结果容易出现异常。
join();//不改变原数组
join() 以指定参数作为连接符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。
concat();//拼接数组 不改变原数组
ES5新增数组 *** 作方法
indexOf (item) 返回元素在数组中对应的索引值,找不到的话,返回-1,用以测试元素是否存在于数组中
forEach(function(item,index)) 遍历数组,没有返回值
map(function(item,index)) 遍历数组,存在返回值
filter(function(item)) {return item>2} 返回大于2的元素
some 返回布尔值,条件部分成立|| arrsome(function(item){return item>2} )
every 返回布尔值,条件全部成立&& arrevery(function(item){return item>2} )
reduce (对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。)arrreduce(function(a,b){return a+b;});
toString()和toLocaleString()
功能:将数组的每个元素转化为字符串,并且输出用逗号分隔的字符串列表。功能类似join();
参数:无
输出:字符串
indexOf()和lastIndexOf()
功能:搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1;lastIndexOf为反向搜索。
参数:元素的值,起点索引(可选)
输出:索引值或-1
Arrayfrom()
功能:将两类对象转为真正的数组:类似数组的对象和可遍历的对象
参数:待转换的对象,第二个参数可选,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
输出:数组
Arrayof()
功能:将一组值,转换为数组。
参数:数组元素
输出:数组
copyWithin()
功能:在当前数组内部,将指定位置的成员复制到其他位置,返回变化后的数组。
参数:索引(从该位置开始替换数据);索引(从该位置开始读取数据,默认为0,负值表示倒数);索引(到该位置前停止读取,默认为最大索引)
输出:返回当前替换后的数组。
注意:改变了当前数组
find()和findIndex()
功能:找到第一个符合条件的数组成员。
参数:回调函数,所有数组成员依次执行该函数,直到找到第一个返回值为true的成员。回调函数可以接受三个参数,依次为值,位置,原数组。
输出:find()返回找到的成员;findIndex()返回成员的位置。
fill()
功能:使用给定的值,填充一个数组。
参数:第一个参数为待填充的值,第二和第三参数可选,分别表示填充的起始和结束位置(不包括)。
输出:填充后的数组
entries()、keys()、values()
功能:用于遍历数组,可以用for…of循环进行遍历。区别是keys()是对键名的遍历、values是对键值的遍历、entries()是对键值对的遍历。
参数:无
输出:遍历器对象
includes()
功能:表示某个数组是否包含给定的值
参数:第一个参数必选(待检查的给定值),第二个参数可选,表示搜索的起始位置,默认为0,负数表示倒数的位置。
输出:一个布尔值。
注意:和indexOf的区别,indexOf进行了运算符的强比对,会导致对NaN误判。
以上就是关于js实现从数组里随机获取元素全部的内容,包括:js实现从数组里随机获取元素、JS中数组的高阶方法、求 JavaScript 查找对象数组元素的高效率的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)