2016-08-16 1 views
-1

Ich habe zwei Objekte wie folgt.So entfernen Sie bestimmte Objekt aus ArrayList mit Javascript oder 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' 
    }]; 

Ich möchte die Objekte von Ergebnis entfernen, die mit allen drei Eigenschaften von finden Objekt angepasst hat. Ich möchte das Ergebnis sollte so sein:

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


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

Können Sie helfen?

+0

Bitte poste deine Bemühungen – mplungjan

+0

Bist du dir sicher, dass das Endergebnis so aussehen soll? Ich meine, du nimmst eine licenseId und schreibst sie als BatchId. Und im Endeffekt haben Sie eine licenseId von 3456, aber das existiert nicht einmal im Start-Array. –

Antwort

1

Der folgende Code sollte funktionieren.

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

können Sie Array find Methode verwenden, wenn das Ergebnis Array das angepaßte Element zu finden. Hier wird licenseId verwendet, um zu finden, ob das Ergebnis-Array das gleiche Element enthält.

Wenn es gefunden wird, verwenden Sie index Argument, um seinen Index zu finden. Verwenden Sie dann splice, um das spezifische Element zu löschen.

auch können Sie Array forEach eine Schleife durch die find Array verwenden

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

Ich würde verwenden remove und 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>

Verwandte Themen