javascript中删除指定数组中指定的元素的代码

 更新时间:2011年02月12日 20:54:06   作者:  
已知一个数组,我们想用指定的方法对数组中的元素进行逐一操作。需要的朋友可以参考下。
函数如下:
复制代码 代码如下:

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]

相关文章

  • layui table 多行删除(id获取)的方法

    layui table 多行删除(id获取)的方法

    今天小编就为大家分享一篇layui table 多行删除(id获取)的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 彻底理解JavaScript的原型与原型链

    彻底理解JavaScript的原型与原型链

    原型和原型链是js中的难点也是重点,明白了原型和原型链会让我们在后面不管是学习还是工作都会更加高效,这篇文章主要给大家介绍了关于JavaScript原型与原型链的相关资料,需要的朋友可以参考下
    2021-10-10
  • js基于canvas实现时钟组件

    js基于canvas实现时钟组件

    这篇文章主要介绍了js基于canvas实现时钟组件的方法,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下
    2021-02-02
  • 30分钟快速掌握Bootstrap框架

    30分钟快速掌握Bootstrap框架

    Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。接下来通过本文给大家介绍如何快速掌握Bootstrap,感兴趣的朋友一起学习吧
    2016-05-05
  • JavaScript闭包函数访问外部变量的方法

    JavaScript闭包函数访问外部变量的方法

    这篇文章主要介绍了JavaScript闭包函数访问外部变量的方法,本文使用匿名函数来实现在闭包中访问外部变量,需要的朋友可以参考下
    2014-08-08
  • 通过大白话理解微信小程序的授权登录

    通过大白话理解微信小程序的授权登录

    很多人会把微信小程序的登录和授权搞混淆,下面这篇文章主要给大家介绍了如何通过大白话理解微信小程序授权登录的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 微信小程序里引入SVG矢量图标的方法

    微信小程序里引入SVG矢量图标的方法

    这篇文章主要介绍了微信小程序里引入SVG矢量图标的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • js微信分享接口调用详解

    js微信分享接口调用详解

    这篇文章主要为大家详细介绍了js微信分享接口调用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • JavaScript中的事件监听详细介绍

    JavaScript中的事件监听详细介绍

    这篇文章主要给大家介绍了关于JavaScript中事件监听的相关资料,在前端开发过程中我们经常会遇到给页面元素添加事件的问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 在localStorage中存储对象数组并读取的方法

    在localStorage中存储对象数组并读取的方法

    频繁ajax请求导致页面响应变慢,所以考虑将数据存储在window.storage中,这样只需请求一次ajax,接下来通过本文给大家介绍了在localStorage中存储对象数组并读取的方法,需要的朋友可以参考下
    2016-09-09

最新评论