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 事件的一些重要说明
Oct 25 Javascript
jQuery在iframe中无法弹出对话框的解决方法
Jan 12 Javascript
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
Dec 08 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
JavaScript使用ZeroClipboard操作剪切板
May 10 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
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实现的DES加密解密封装类完整实例
2017/04/29 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
window.open的功能全解析
2006/10/10 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
python中list常用操作实例详解
2015/06/03 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
《木笛》教学反思
2014/03/01 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
重阳节慰问信
2015/02/15 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
闪闪的红星观后感
2015/06/08 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
golang 实现并发求和
2021/05/08 Golang
python基于机器学习预测股票交易信号
2021/05/25 Python
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸