2012-06-18 5 views
0

Здравствуйте, я пытался удалить объекты из массива объектов, которые у меня есть, а затем создать еще один новый объект (я использую $ .map(), чтобы создать новый объект)удалить объект из массива объектов

удалить это объект из объекта (х) это object.number должен соответствовать одному из числа число в массиве (у)

это следующий код работает, но я только удалить объект, который имеет 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);​ 

Приведенный выше код удаляет только объект, у которого есть 40 в объекте object.number, как я могу это сделать?

ответ

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 */ 
} 

Обратите внимание на длину кеширования.

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/

0

Используйте следующее:

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

$.makeArray() не требуется, но рекомендуется, если ваш массив может содержать неупорядоченные данные.

0

Я сделал обновление вашей скрипки here. В основном вы не проверяли каждое значение в массиве delete.

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);​ 
Смежные вопросы