JavaScript随机获取数组值不重复Mathfloorrandompush
Posted 牧碼人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript随机获取数组值不重复Mathfloorrandompush相关的知识,希望对你有一定的参考价值。
文章目录
前言
targetArr
:目标参数,即循环后需要返回的值。
originArr
:匹配参数,即需要从此参数中随机获取某一项里面的某个值放到targetArr
中。
两个参数都是数组类型。
key
:匹配字段,需要根据此字段区分是否获取到的值为以获取过的值,所以需要此字段是唯一值,最好是字符串类型,但尽量不要是中文,也不能为特殊字符。
☺☺☺☺☺☺☺
Math
是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math
不是一个函数对象。
floor
函数总是返回小于等于一个给定数字的最大整数。也就是只保留整数部分,丢掉小数点和小数值。
注意:当值为负数时可能有些难理解,例如:-36.6
得到的结果是-37
,因为向下取整,所以-37
小于-36
。
random
函数返回一个浮点数,伪随机数在范围从0
到小于1
,也就是说,从0
(包括0
)往上,但是不包括1
(排除1
),然后您可以缩放到所需的范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置。
☺☺☺☺☺☺☺
push
方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
1、代码
function timeDistance(targetArr = [], originArr = [], key = 'id')
key = String(key);
let obj = ,
newArr = [];
for (let i = 0; i < targetArr.length;)
let targetItem = targetArr[i],
originItem = originArr[Math.floor(Math.random() * originArr.length)];
if (!obj[originItem[key]])
targetItem.icon = targetItem.title + originItem.icon;
newArr.push(targetItem);
obj[originItem[key]] = originItem.icon;
i++;
return newArr;
let targetArr = [
id: 1,
title: 'a'
,
id: 2,
title: 'b'
,
id: 3,
title: 'c'
,
id: 4,
title: 'd'
,
id: 5,
title: 'e'
,
id: 6,
title: 'f'
,
id: 7,
title: 'g'
],
originArr = [
id: '1a',
icon: 'a.png'
,
id: '2b',
icon: 'b.png'
,
id: '3c',
icon: 'c.png'
,
id: '4d',
icon: 'd.png'
,
id: '5e',
icon: 'e.png'
,
id: '6f',
icon: 'f.png'
,
id: '7g',
icon: 'g.png'
,
id: '8h',
icon: 'h.png'
,
id: '9i',
icon: 'i.png'
];
console.log(timeDistance(targetArr, originArr));
// […, …, …, …, …, …, …]
2、解析
定义一个函数名为
timeDistance
的函数,主要起到封装作用。首先在函数里面定义一个名为obj
的对象和一个名为newArr
的数组;第二步使用for
循环目标数组,在for
循环里面首先定义变量接收目标数组循环出来的项,接着定义随机获取源数组的项;再者通过对象中key
的唯一性判断obj
里面是否存在对应键名,如果不存在,则进行数据新增,并且把值存到obj
和newArr
中;最后进行i++
;如果存在则不需要做任何操作,此时for
会继续循环,并且i
不变。
以上是关于JavaScript随机获取数组值不重复Mathfloorrandompush的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript随机获取数组值,并且不重复Mathfloorrandompush
JavaScript问题:一个有一百个随机数字的数组中(可能有重复数字),随机抽取十个,且这十个数字不重复。