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的MessageBox
Dec 03 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
JavaScript动态修改弹出窗口大小的方法
Apr 06 Javascript
详解JavaScript语言的基本语法要求
Nov 20 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
详解react-router4 异步加载路由两种方法
Sep 12 Javascript
微信小程序实现渐入渐出动画效果
Jun 13 Javascript
使用layui的layer组件做弹出层的例子
Sep 27 Javascript
36个正则表达式(开发效率提高80%)
Nov 17 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 Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
input的focus方法使用
2010/03/13 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
vue h5移动端禁止缩放代码
2019/10/28 Javascript
python魔法方法-自定义序列详解
2016/07/21 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
C语言基础笔试题
2013/04/27 面试题
护理专业个人求职简历的自我评价
2013/10/13 职场文书
亮剑精神观后感
2015/06/05 职场文书
十月围城观后感
2015/06/08 职场文书
人生遥控器观后感
2015/06/11 职场文书
电影雨中的树观后感
2015/06/15 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript