2016-08-23 3 views
1

Используя lodash, можно ли удалить один массив из другого, избегая удаления дубликатов?, не удаляя дубликаты с использованием разницы lodash

настоящее время я использую _.difference

// this returns [4] 
_.difference([1, 1, 1, 2, 2, 2, 3, 4], [1, 2, 3]) 

// I want it to return [1, 1, 2, 2, 4] 
+1

Ваша проблема очень неоднозначным. Неясно, какое возникновение каждого элемента должно быть удалено из первого массива. Предположим, что у вас есть эти массивы: '[1, 1, 2, 2, 1, 2, 3, 4], [1, 2, 3]'. Что вы ожидаете от результата? – hindmost

+0

hmm, хороший пункт. Я хотел бы удалить первый экземпляр каждого элемента во втором массиве. так что это будет [1,2,1,2,3,4] – Finnnn

+0

AFAIK lodash не имеет такого метода, готового к использованию. Я бы предложил использовать вложенный цикл. – hindmost

ответ

3

Это, как я хотел бы сделать это с помощью чистого JS

var arr1 = [1, 1, 1, 2, 2, 2, 3, 4], 
 
    arr2 = [1, 2, 3], 
 
    result = arr2.reduce((p,c) => {var idx = p.indexOf(c); 
 
           return idx === -1 ? p : (p.splice(idx,1),p)}, arr1); 
 
console.log(result);

1

Основываясь на комментарий от @hindmost, я использовал цикл.

var tempArray = [1,1,1,2,2,2,3,3,1,2] 

_.each([1, 2, 3], function(value) { 
    tempArray.splice(tempArray.indexOf(value), 1); 
}); 
1

Да, это вернет 4 Поскольку _.difference Возвращает новый массив фильтруется values.I пытался ява скрипт решение. Надеюсь, это поможет вам.

function keepDuplicate(array1, array2){ 
    var occur; 
    var indexes = []; 
    _.each(array2, function(value){ 
    _.each(array1, function(ar1value, index){ 
    if(value === ar1value){ 
     occur = index; 
    } 
    }); 
    indexes.push(occur); 
    }); 
    _.each(indexes, function(remove, index){ 
    if(index === 0){ 
    array1.splice(remove, 1); 
    } 
    else{ 
    remove = remove-index; 
    array1.splice(remove,1); 
    } 
}); 
return array1; 
} 

keepDuplicate([1, 1, 1, 2, 2, 2, 3, 4], [1, 2, 3])

Это Возвращение [1, 1, 2, 2, 4]

+0

, этот код удалит одно значение из первого массива, который находится во втором массиве. –

Смежные вопросы