0

Вопрос по javascript, arrays – Как найти элементы в массиве, которых нет в массиве1?

Error: User Rate Limit Exceeded

var a1 = [ { ID: 2, N:0 }, { ID: 1, N:0 } ];
var a2 = [ { ID: 1, N:0 }, { ID: 2, N:0 }, { ID: 3, N:0 } ];

Мне нужно, чтобы получить все элементы, которые наa2Error: User Rate Limit Exceededa1, Элемент здесь отличается от другого только свойствомIDдругие свойства следует игнорировать. И я не могу гарантировать порядок элементов в массивах. Значение результата для этого примера должно быть:

var result = [ { ID: 3, N:0 } ]; // result for the example above

Как я могу сделать это эффективным способом? (Я буду сравнивать массивы от 500 до 5000 длины)

  • Error: User Rate Limit Exceeded

    от
  • 3

    Error: User Rate Limit Exceeded

    function findUniques(testItems, baseItems) {
        var index = {}, i;
        var result = [];
    
        // put baseItems id values into the index
        for (i = 0; i < baseItems.length; i++) {
            index[baseItems[i].ID] = true;
        }
    
        // now go through the testItems and collect the items in it 
        // that are not in the index
        for (i = 0; i < testItems.length; i++) {
            if (!(testItems[i].ID in index)) {
                result.push(testItems[i]);
            }
        }
        return(result);
    }
    
    var a1 = [ { ID: 2, N:0 }, { ID: 1, N:0 } ];
    var a2 = [ { ID: 1, N:0 }, { ID: 2, N:0 }, { ID: 3, N:0 } ];
    
    var result = findUniques(a2, a1);
    // [{"ID":3,"N":0}]
    

  • 0

    Error: User Rate Limit Exceeded

    var a1 = [ { ID: 2, N:0 }, { ID: 1, N:0 } ];
    var a2 = [ { ID: 1, N:0 }, { ID: 2, N:0 }, { ID: 3, N:0 } ];
    
    var from, to;
    if(a1 > a2){
        from = a1
        to = a2
    } else {
        from = a2
        to = a1
    }
    
    var a3 = _.filter(from, function(obj){
        var compare = _.find(to, function(obj2){ return obj.ID === obj2.ID });
        return compare === undefined
    });
    console.log(a3);