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 相关文章推荐
javascript 操作select下拉列表框的一点小经验
Mar 20 Javascript
js输出列表实现代码
Sep 12 Javascript
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
JS打开新窗口的2种方式
Apr 18 Javascript
jQuery Ajax()方法使用指南
Nov 19 Javascript
JavaScript实现数组随机排序的方法
Jun 26 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
Jul 25 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
详解Vue组件之作用域插槽
Nov 22 Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 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
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
简单了解django缓存方式及配置
2019/07/19 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
python3代码中实现加法重载的实例
2020/12/03 Python
Python实现随机爬山算法
2021/01/29 Python
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
经管应届生求职信
2013/11/17 职场文书
车间统计员岗位职责
2014/01/05 职场文书
七年级音乐教学反思
2014/01/26 职场文书
2014年话务员工作总结
2014/11/19 职场文书
离婚答辩状范文
2015/05/22 职场文书
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL