2024-7-27 打卡第一天 学习视频链接
unshift 在数组首端添加一个或者多个数据
- 任务:实现自定义unshift方法
- splice(0,0,el) 第一个0表示从索引0开始,第二个0表示删除的数量,为0就是不删除任何一个数值的意思,最后一个el表示要添加的元素,不加默认不添加
- Array.prototype.myUnshift = function(){...}向
Array
对象的原型(prototype
)上添加了一个自定义的方法myUnshift
。这意味着一旦这个代码被执行,所有的数组对象(即所有通过Array
构造函数或其字面量语法创建的数组)都将能够调用这个新添加的myUnshift
方法,就好像它是 JavaScript 数组对象内置的一部分一样
<!--arguments 是一个类数组对象,它包含了传给函数的所有参数-->
Array.prototype.myUnshift = function(){
let len = arguments.length-1;
for(let i = len; i >= 0; i--){
var el = arguments[i];
this.splice(0,0,el);
}
return this.length;
}
var arr = [3,4,5];
console.log(arr.myUnshift(1,2,3),arr);
数组去重的两种写法
- 用filter先循环打印出数组的值和对应的索引,indexOf(value,0)表示从索引0开始查找value的位置,有多个以上会返回找到的第一个,如果和当前索引是一样的表示第一次遍历到,结果是true保存,false就去除
- 比如[2,6,5,6],遍历到第一个6的时候会返回索引1和当前遍历到的一致,结果是true所以保存,遍历到第二个6的时候返回的结果还是索引1,但是这个时候的指针指向了3,不一致,所以不保存
Array.prototype.myUnique = function(){
<!-- value是循环遍历出来的数组的值,index是对应的索引-->
return this.filter((value,index) => {
<!-- this.indexOf(value,0) 从数组的开头(索引 0)开始查找指定的 value,并返回第一个索引-->
return this.indexOf(value,0) === index;
});
}
var arr = [2,6,5,6];
console.log(arr.myUnique());
- 使用Set集合不重复的特性
Array.prototype.myUnique = function(){
return Array.from(new Set(this));
}
var arr = [2,6,5,6];
console.log(arr.myUnique());
获取指定范围的随机数
Math.round(num) 四舍五入
Math.floor(num) 向下取整
Math.cell(num) 向上取整
- Math.random()的范围在
[0, 1)
之间,将这个值乘以len
时,范围就变成了[0 * len, 1 * len)
,即[0, len)
- 下面第一个最大最小均不涉及的情况中。首先乘以(max - min - 2),此时random的范围就是[0*(max - min - 2),1*(max - min - 2)]即[0,max - min - 2],这个时候想要最大最小均不涉及,添加min+1即可,此时的范围就变成了[0+min+1,max - min - 2+min+1]即[min+1,max-1]
- 其他三种情况中都是乘以长度再加min,首先乘以长度就是让变化范围在这个长度之间,而加min就是让这个范围从min开始
function fn(min,max){
// (min.max) 最大最小均不涉及
<!-- return Math.round(Math.random() * (max - min - 2) + min + 1);-->
// [min,max] 最大最小均涉及
<!-- retrun Math.round(Math.random() * (max - min) + min);-->
// (min,max] 最小不涉及,最大涉及
<!-- return Math.cell(Math.random() * (max - min) + min);-->
// [min,max) 最小涉及,最大不涉及
return Math.floor(Math.random() * (max - min) + min);
}
console.log(fn(1,10));
打印100以内的质数
- let count 必须设置为0,如果不进行设置,初始值为NaN,最开始的2打印不出来
let count = 0 ;
for(var i = 2 ; i <= 100; i++){
for(var j = 1; j <= i; j++){
if( i % j === 0){
count++;
}
}
if(count == 2){
console.log(i);
}
count = 0;
}
获取URL中的参数
-
split("?")
以?
为分隔符来分割传入的URL字符串。这个方法会返回一个数组,其中第一个元素是URL的主部分(不包括查询参数和锚点),第二个元素是查询参数部分,从分隔符?开始到字符串的结尾 [1]
:通过索引1
访问这个数组,从而获取到查询参数部分。如果URL中没有?
,则这个数组只有一个元素(即整个URL),此时split("?")[1]
会是undefined
new URLSearchParams(url)
:根据查询参数字符串url
来创建一个URLSearchParams
对象。这个对象提供了一系列的方法来解析和操作URL的查询参数。urlParams.entries()
:URLSearchParams
对象的entries
方法返回一个迭代器,迭代器中的每个元素都是一个[key, value]
数组,表示查询参数的一个键值对。Object.fromEntries(...)
:Object.fromEntries()
方法将键值对列表转换为一个对象。这里,它接收urlParams.entries()
返回的迭代器,并将其转换为一个普通对象,对象的属性名就是查询参数的键,属性值就是对应的值。
let url = "https://alibaba.com?a=1&b=2&c=3";
function queryURLParams(URL){
let url = URL.split("?")[1];
let URLParams = new URLSearchParams(url);
let params = Object.fromEntries(URLParams.entries());
return params;
}
console.log(queryURLParams(url));
数组的随机排列的两种写法
- Math.random()的范围在
[0, 1)
之间,将这个值乘以len
时,范围就变成了[0 * len, 1 * len)
,即[0, len),前面具体描述过相应的过程,这个步骤中没有+min的原因就是最开始定义的边界就是0,i从0开始,所以不需要添加最小值这一步
Math.random()
生成一个[0, 1)
范围内的随机浮点数,所以用parseInt来进行取整
function result(arr){
for(var i = 0; i < arr.length; i++){
let randomIndex = parseInt(Math.random()*arr.length);
let curr = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = curr;
}
return arr;
}
var arr = [1,2,3,4,5];
console.log(result(arr));
() => Math.random() - 0.5
是一个箭头函数,它返回一个介于-0.5
和0.5
之间的随机数。这个随机数可以是负数、零或正数- 在
sort()
方法中,如果比较函数返回一个小于 0 的值,则第一个参数会被视为“较小”并排在前面;如果返回大于 0 的值,则第二个参数会被视为“较大”并排在前面;如果返回 0,则两个参数的顺序不会改变
var arr = [1,2,3,4,5];
Array.prototype.mySort = function(){
return arr.sort(() => Math.random() - 0.5);
}
console.log(arr.mySort());