javascript中删除指定数组中指定的元素的代码


Posted in Javascript onFebruary 12, 2011

函数如下:

foreach = function (obj, insp){ 
if(obj== null && obj.constructor != Array){ 

return []; 
} 
//obj是要处理的数组,obj==null 表示对象尚未存在;obj.constructor != Array 表示对象obj的属性的构造函数不是数组; 
//constructor属性始终指向创建当前对象的构造函数。两个条件均满足,则返回空数组[]; 
//下面对constructor属性作进一步了解。 
var obj= [1, 2, 3, 4]; // 等价于 var obj= new Array(1, 2, 3, 4); 
console.log(obj.constructor === Array); // 返回true 表明obj的构造函数为Array; 
var foo= function() { }; // 等价于 var foo = new Function(); 
console.log(foo.constructor === Function); // 返回true 表明foo的构造函数为Function; 
var obj = new Foo(); //由构造函数实例化一个obj对象 
console.log(obj.constructor === Foo); // 返回true 表明obj的构造函数为Foo;

-----------------------------------------------------------------------------------------------------------
var i=0, len = obj.length, r = [];
while(i<len){

var x = insp(obj[i], i);

if (x !== null) {

r[r.length] = x;
}
 i++;
}
return r;
};
//对数组对象obj进行遍历,参数insp代表一个方法或函数,用于对obj中的每个元素进行操作。给参数insp传递了两个参数,obj[i]代表数组中的每一个元素值;并将函数参数insp赋给x,最终将x值赋给数组r。
-----------------------------------------------------------------------------------------------------------
比如我们要遍历数组中的每一个元素,引用foreach函数
var testArray = [1,2,3,4,5,1,2,'w'];
foreach(testArray, function(i){

alert(i)
});
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
我们用另一个函数来删除指定数组中指定的元素;

ArrayWithout = function(){ 
if (arguments.length < 2) { 
// Arguments 是特殊的对象,代表函数的参数. 


return arguments.length == 1 ? arguments[0] : null; 

} 

var results = []; 

 var aa = arguments[0]; 
//将第一参数赋给数组aa; 

if (aa === null || aa.constructor != Array) { 


return null; 
//如果aa不存在或者不是数组,那么返回null; 

} 

if(arguments[1].constructor == Array){ 
// 如果第二个参数是数组,则将参数数组中对应的每个元素都删除; 


var args = []; 


args[0] = aa; 
//aa = arguments[0] 将aa赋给数组args,作为其第一个元素值; 


foreach(arguments[1], function(v, i){ 
//引用了函数foreach,来对数组arguments[1]中每个元素进行操作, 



args[i+1] = v; 
// v代表数组arguments[1]中每个元素值,将它们一一赋值给args[1],args[2]...,而args[0]=arguments[0]; 

 }); 

 } 

 else{ 


args = arguments; 
//如果第二个参数不是数组,则直接将参数数组赋给args; 

} 

for(var i = 0;i < aa.length; i ++){ 


var isWithout = true; 

  for(var j = 1; j < args.length ; j ++){ 

  
if(aa[i] == args[j]){ 


 
isWithout = false; 


   break; 
// 切记j是从1开始的,因为args的第一元素args[0]是arguments[0],正是我们要处理的的原数组,等同于数组aa; 
让要删除的各个元素与原数组aa中的某一元素进行逐次比较,如果相同,break 跳出循环; isWithout返回false,所以也不再执行下面的 results.push(aa[i]); 

  } 

 } 


 if (isWithout) { 



 results.push(aa[i]); 



  //所谓删除原理,就是将原数组各元素与要删除的元素进行比较,保留与要删除的元素不相同的元素并赋给一个新的数组results; 


} 

} 

return results; 
//返回已经删除了指定元素的数组; 
}; 
// 引用ArrayWithout的例子 
var testArray = [1,2,3,4,5,1,2,'w']; 
var result = ArrayWithout(testArray, 1, 3); 
//var result = ArrayWithout(testArray, [1, 4]); 
alert(result) //[2,4,5,2]

源代码如下:
foreach = function (obj, insp){ 
if(obj == null && obj.constructor != Array){ 
return []; 
} 
var i=0, len = obj.length, r = []; 
while(i<len){ 
var x = insp(obj[i], i); 
if (x !== null) { 
r[r.length] = x; 
} 
i++; 
} 
return r; 
}; 
ArrayWithout = function(){ 
if (arguments.length < 2) { 
return arguments.length == 1 ? arguments[0] : null; 
} 
var results = []; 
var aa = arguments[0]; 
if (aa === null || aa.constructor != Array) { 
return null; 
} 
if(arguments[1].constructor == Array){ 
var args = []; 
args[0] = aa; 
foreach(arguments[1], function(v, i){ 
args[i+1] = v; 
}); 
} 
else{ 
args = arguments; 
} 
for(var i = 0;i < aa.length; i ++){ 
var isWithout = true; 
for(var j = 1; j < args.length ; j ++){ 
if(aa[i] == args[j]){ 
isWithout = false; 
break; 
} 
} 
if (isWithout) { 
results.push(aa[i]); 
} 
} 
return results; 
}; 
var testArray = [1,2,3,4,5,1,2]; 
foreach(testArray, function(i){ 
alert(i) 
}) 
var result = ArrayWithout(testArray, 1, 3); 
//var result = ArrayWithout(testArray, [1, 3]); 
alert(result) //[2,4,5,2]
Javascript 相关文章推荐
表单元素的submit()方法和onsubmit事件应用概述
Feb 01 Javascript
jquery获取焦点和失去焦点事件代码
Apr 21 Javascript
JQuery表格内容过滤的实现方法
Jul 05 Javascript
js控制表单操作的常用代码小结
Aug 15 Javascript
javascript编程异常处理实例小结
Nov 30 Javascript
浅析JS异步加载进度条
May 05 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
Angular使用Restful的增删改
Dec 28 Javascript
javascript实现倒计时关闭广告
Feb 09 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 #Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 #Javascript
URL地址中的#符号使用说明
Feb 12 #Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 #Javascript
基于jquery的jqDnR拖拽溢出的修改
Feb 12 #Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
Feb 12 #Javascript
在vs2010中调试javascript代码方法
Feb 11 #Javascript
You might like
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP计数器的实现代码
2013/06/08 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
无闪烁更新网页内容JS实现
2013/12/19 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
解读ES6中class关键字
2017/11/20 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
python3简单实现微信爬虫
2015/04/09 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python函数的万能参数传参详解
2019/07/26 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
学前班评语大全
2014/05/04 职场文书
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android