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 相关文章推荐
js创建子窗口并且回传值示例代码
Jul 02 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
Dec 05 Javascript
JavaScript原生对象之Date对象的属性和方法详解
Mar 13 Javascript
javascript实现控制div颜色
Jul 07 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
手机注册发送验证码倒计时的简单实例
Nov 15 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
Mar 11 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
vue实现移动端图片上传功能
Dec 23 Javascript
JavaScript装饰者模式原理与用法实例详解
Mar 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
PHP调用三种数据库的方法(1)
2006/10/09 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
python与C互相调用的方法详解
2017/07/14 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
联谊活动策划书
2014/01/26 职场文书
求职教师自荐书
2014/06/19 职场文书
门卫岗位职责
2015/02/09 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript