2016-08-16 2 views
-1

У меня есть два объекта, подобные этому.Как удалить конкретный объект из массиваList с использованием Javascript или Lodash

var find = [{ 
    licenseId: 'A123', 
    batchId: '123', 
    name: 'xxx' 
}, 
    { 
     licenseId: 'B123', 
     batchId: '124', 
     name: 'yyy' 
    }]; 


var result = [ 
    { 
     licenseId: 'A123', 
     batchId: '123', 
     name: 'xxx', 
     tag: 'college', 
     sem: 'fourth' 
    }, 

    { 
     licenseId: 'B123', 
     batchId: '124', 
     name: 'yyy', 
     tag: 'college', 
     sem: 'third' 
    }, 
    { 
     licenseId: '1111', 
     batchId: 'C123', 
     name: 'yyy', 
     tag: 'college', 
     sem: 'second' 
    }, 


    { 
     licenseId: '3456', 
     batchId: 'B123', 
     name: 'yyy', 
     tag: 'college', 
     sem: 'second' 
    }]; 

Я хочу, чтобы удалить объекты из Результат который совпал со всеми тремя свойствами найти объект. Я хочу, чтобы результат был следующим:

[{ 
     licenseId: '1111', 
     batchId: 'C123', 
     name: 'yyy', 
     tag: 'college', 
     sem: 'second' 
    }, 


    { 
     licenseId: '3456', 
     batchId: 'B123', 
     name: 'yyy', 
     tag: 'college', 
     sem: 'second' 
    }]; 

Можете ли вы помочь?

+0

Пожалуйста, напишите ваши усилия – mplungjan

+0

Вы уверены, что, как вы хотите, чтобы конечный результат выглядел? Я имею в виду, что вы принимаете licenseId и ставите его как batchId. И в конечном итоге у вас есть licenseId из 3456, но это даже не существует в стартовом массиве. –

ответ

1

Следующий код должен работать.

for(var j=0;j < find.length;j++){ 
    for (var i = 0; i < result.length; i++) { 
    if ((result[i].licenseId == find[j].licenseId) && 
     (result[i].name == find[j].name) && 
     (result[j].batchId == find[j].batchId)) { 
     result.splice(i, 1); 
     break; 
    } 
    } 
} 
1

Вы можете использовать массиву find метод, чтобы найти, если результирующий массив имеет совпадающий элемент. Здесь licenseId используется, чтобы найти массив результатов в том же элементе.

Если он найден, используйте аргумент index, чтобы найти его индекс. Затем используйте splice для удаления определенного элемента.

также вы можете использовать массив forEach в цикле через find массив

var find = [// json objects]; 

var result = [// json objects]; 
find.forEach(function(item){ 

var _findInResult = result.find(function(itemInResult,index){ 
    if(itemInResult.licenseId == item.licenseId){ 
    result.splice(index,1); 
    } 
    return itemInResult.licenseId == item.licenseId 
}) 

}) 
console.log(result) 

JSFIDDLE

0

Я хотел бы использовать remove и some

_.remove(result, function(obj) { 
    return _.some(find, { 
     licenseId: obj.licenseId, 
     batchId: obj.batchId, 
     name: obj.name, 
    }); 
}); 

var find = [{ 
 
    licenseId: 'A123', 
 
    batchId: '123', 
 
    name: 'xxx' 
 
}, 
 
{ 
 
    licenseId: 'B123', 
 
    batchId: '124', 
 
    name: 'yyy' 
 
}]; 
 

 
var result = [ 
 
{ 
 
    licenseId: 'A123', 
 
    batchId: '123', 
 
    name: 'xxx', 
 
    tag: 'college', 
 
    sem: 'fourth' 
 
}, 
 
{ 
 
    licenseId: 'B123', 
 
    batchId: '124', 
 
    name: 'yyy', 
 
    tag: 'college', 
 
    sem: 'third' 
 
}, 
 
{ 
 
    licenseId: '1111', 
 
    batchId: 'C123', 
 
    name: 'yyy', 
 
    tag: 'college', 
 
    sem: 'second' 
 
}, 
 
{ 
 
    licenseId: '3456', 
 
    batchId: 'B123', 
 
    name: 'yyy', 
 
    tag: 'college', 
 
    sem: 'second' 
 
}]; 
 

 
_.remove(result, function(obj) { 
 
    return _.some(find, { 
 
    licenseId: obj.licenseId, 
 
    batchId: obj.batchId, 
 
    name: obj.name, 
 
    }); 
 
}); 
 

 
console.log(result);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.min.js"></script>