Prune Array

One possible way to do it.

by simpulton

JavaScript

var buildIndex = function (index, list, property) {
    angular.forEach(list, function (item) {
        index[item[property]] = item;
    });
    return index;
};

var pruneArray = function (targetArray, sourceArray, property) {
    var tempList = [], tempIndex = [];
    tempIndex = buildIndex(tempIndex, sourceArray, 'key');
    
    angular.forEach(targetArray, function (targetItem) {
        if(!tempIndex[targetItem[property]]) {
        	tempList.push(targetItem);
        }
    });

    return tempList;
};

targetArray = [{key:1, name:'test 1'},{key:3, name:'test 3'},{key:5, name:'test 5'}];

sourceArray = [{key:1, name:'test 1'},{key:2, name:'test 2'}, {key:3, name:'test 3'},{key:4, name:'test 4'}];

newArray = pruneArray(targetArray, sourceArray, 'key');

console.log(newArray);