Array对象的方法实现(2)----Array.prototype.every和Array.prototype.fill(实现常规参数的功能)
2023-09-14 09:01:36 时间
仅供学习参考,发现错请纠正,谢谢!
4,Array的every方法
//every 检测数组中的值是否存在满足条件的值,全部满足条件返回true和有一个不满足就返回false,不对空数组进行检测,不改变原数组
//语法:array.every(function(currentValue,index,arr), thisValue);
//注意:1,返回一个布尔值。2,原数组不变。
Array.prototype._every = function(fn){
//获取链接数组的参数param,同时用JSON可以深度拷贝数组Array
let new_arr = JSON.parse(JSON.stringify(this)),count = 0;
for(let i = 0;i < this.length; i++){
if(fn(this[i])){
count++;
}else{
return false;
}
if(count === this.length){
return true;
}
}
return true;
}
var everyArr = [2,3,4,1];
var bool0 = everyArr.every(function(index){
return index > 1;
});
var bool1 = everyArr._every(function(index){
return index > 1;
});
console.log(bool0);
console.log(bool1);
输出:
false
false
注意:
(1,在谷歌浏览器测试的时候,this === null,直接返回true,所以我在全局直接返回了一个true,但是我感觉判断有问题
5,Array的fill方法
//fill 用于将一个固定值替换数组的元素。
//语法:array.fill(value, start, end);
//注意:1,返回一个数组。2,改变原来的数组。
Array.prototype._fill = function(value, start, end){
//获取链接数组的参数param,同时用JSON可以深度拷贝数组Array
let param = arguments, new_arr = JSON.parse(JSON.stringify(this)),that = this;
function loop(num0,num1){
let param0 = num0 || 0,param1 = num1 || new_arr.length;
for(let i = param0; i < param1 ; i++){
that[i] = param[0];
}
}
if(param.length === 1){
loop();
}else if(param.length === 2){
loop(param[1]);
}else if(param.length === 3){
loop(param[1],param[2]);
}
return that;
}
var fillArr = [1,2,3,4,5,6];
var fillArr0 = [1,2,3,4,5,6];
console.log(fillArr.fill(3,0));
console.log(fillArr);
console.log(fillArr0._fill(3,0));
console.log(fillArr0);
注意:
(1,由于在loop函数中用了外部的this,所以需要在外部留住this
Array.prototype.fill = function(value) {
// Steps 1-2.
var O = Object(this);
// Steps 3-5.
var len = parseInt(O.length);
// Steps 6-7.
var relativeStart = parseInt(arguments[1] || 0);
// Step 8.
var k = relativeStart < 0
? Math.max(len + relativeStart, 0)
: Math.min(relativeStart, len);
// Steps 9-10.
var relativeEnd = parseInt(arguments[2] || len);
// Step 11.
var final = relativeEnd < 0
? Math.max(len + relativeEnd, 0)
: Math.min(relativeEnd, len);
// Step 12.
for (; k < final; k++) {
O[k] = value;
}
// Step 13.
return O;
};
相关链接:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/fill
相关文章
- session对象和Cookie对象的使用方法以及区别
- 腾讯云云存储解决跨域防盗链问题的方法
- wsl2出现参考的对象类型不支持尝试的操作的解决方法(win11 永久解决)
- 【EventBus】事件通信框架 ( 实现几个关键的封装类 | 消息中心 | 订阅注解 | 订阅方法封装 | 订阅对象-方法封装 | 线程模式 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )
- 查看Linux目录的方法:ls(在linux怎么查看目录)
- JSP application.getResourceAsStream()方法:返回指定资源的输入流对象
- Java Set.add()方法:向Set集合添加对象
- Java Set.toArray()方法:用Set集合中的所有对象创建一个数组
- JSP Page.equals()方法:比较两个对象
- JSP Page.hashCode()方法:返回对象的哈希码值
- JSP Request.getCookies()方法:获取cookie对象
- JSP Response.addCookie()方法:添加cookie对象
- Spring update方法:更新指定的实体对象
- Spring queryForObject方法:查询的结果以对象类型返回
- 实现Oracle用户对象导出的方法(oracle导出用户对象)
- Linux串口检测方法详解,轻松解决串口连接问题(linux串口检测)
- Oracle自增主键ID的实现方法及注意事项(oracle主键id自增)
- Oracle数据库中删除LOB类型字段的方法(oracle删除lob)
- MySQL的nowait功能简介及使用方法(mysqlnowait)
- 查看Redis存储空间快速精准的统计方法(查看redis存储大小)
- MySQL实现上下级递归的方法及其应用(mysql上下级递归)
- MySQL储存中文问题解决方法(mysql不能存放中文)
- 解决Oracle连接不上的方法(oracle上不去)
- javascript引用对象的方法
- JavaScript内置对象属性及方法集合
- PHPMYADMIN导入数据最大为2M的解决方法
- 改进版通过Json对象实现深复制的方法
- 扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
- c#实现数据同步的方法(使用文件监控对象filesystemwatcher)
- javascripthistory对象(历史记录)使用方法(实现浏览器前进后退)
- jquery获取对象的方法足以应付常见的各种类型的对象
- 多个jsp页面共享一个js对象的超级方法
- 浅谈重写window对象的方法
- JS自定义对象实现Java中Map对象功能的方法
- js中直接声明一个对象的方法
- JSP隐含对象response实现文件下载的两种方法