从对象数组中删除对象

时间:2012-06-18 21:18:10

标签: javascript jquery

您好我试图从我拥有的对象数组中删除对象,然后创建另一个新对象(我使用$ .map()来创建新对象)

从对象(x)中删除此对象,它的object.number必须匹配数组中的数字之一(y)

以下代码有效但我只删除了具有object.number = 40的对象 DEMO

代码:

   var x =[ //this is the object 
  {name : 'mark' , number : '10' , color:'green'},
  {name : 'jeff' , number : '15' , color:'blue'} ,
  {name : 'joy' , number : '30' , color:'yellow'},
  {name : 'mick' , number : '15' , color:'red'},
  {name : 'mick' , number : '40' , color:'black'}] ; 

      var y =['40','15']; // i need to remove all object.number that match the 
        // number in this array

     var newObject = $.map(x  ,function(index, value){
        for(i in y){
         if(index.number == y[i])
        {return null ; }
       else{
        return index;
            }      
      }

    });
 console.log(newObject);​

上面的代码只删除了它的object.number中有40个的对象,我怎么能让它工作?

5 个答案:

答案 0 :(得分:0)

这就是你想要的:

var newObject = $.map(x  ,function(index, value){
    for(i in y){
        if(index.number == y[i])
            return null;
    }
    return index;
});
console.log(newObject);​

jsFiddle。顺便说一句:我认为对数组使用for(i in y)不是一个好习惯(数组可能有其他属性)。你应该使用标准:

var l = y.length;
for(var i = 0; i < l; i++){
    /* the other code */
}

注意长度缓存。

答案 1 :(得分:0)

试试这段代码:

var newObject = $.map(x, function(index, value){  
    return (y.indexOf(index.number) != -1) ? null : index;
});

http://jsfiddle.net/Dc68W/

答案 2 :(得分:0)

尝试更改您的功能,如下所示

var newObject = $.map(x, function(value, index) {   
   if ($.inArray(value.number, y) == -1) {
       return value;
   } else {
       return null;
   }
});

DEMO: http://jsfiddle.net/skram/C3d9T/7/

答案 3 :(得分:0)

使用以下内容:

var newObject = $.map($.makeArray(x), function(index, value){  
    return y.indexOf(index.number) != -1 ? null : index;
});

$.makeArray()不是必需的,但如果您的阵列可能包含无序数据,则建议使用{{1}}。

答案 4 :(得分:0)

我已经更新了你的小提琴here。基本上你没有检查删除数组中的每个值。

var x =[
{name : 'mark' , number : '10' , color:'green'},
{name : 'jeff' , number : '15' , color:'blue'} ,
{name : 'joy' , number : '30' , color:'yellow'},
{name : 'mick' , number : '15' , color:'red'},
{name : 'mick' , number : '40' , color:'black'}] ; 

var y =['40','15'];

var newObject = $.map(x  ,function(index, value){

    var valid = true;
    for(var i = 0; i < y.length; i++){

        if(index.number == y[i])
           valid = false;             
    }
    if(valid)return index;
    else return null;
    });
console.log(newObject);​