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函数
Apr 09 Javascript
js/jquery去掉空格,回车,换行示例代码
Nov 05 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
Dec 16 Javascript
JS继承之借用构造函数继承和组合继承
Sep 07 Javascript
JS搜狐面试题分析
Dec 16 Javascript
vue的全局变量和全局拦截请求器的示例代码
Sep 13 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 Javascript
vscode中使用npm安装babel的方法
Aug 02 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公司全球首推PHP认证
2006/10/09 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
激活 ActiveX 控件
2006/10/09 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
Python中的hypot()方法使用简介
2015/05/18 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
小学班长竞选演讲稿
2014/04/24 职场文书
团日活动总结
2014/04/28 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
python游戏开发之pygame实现接球小游戏
2022/04/22 Python