JavaScript: как выбросить элементы из одного массива, которые находятся в другом

#javascript #arrays

#javascript #массивы

Вопрос:

Мне нужна функция для возврата из массивов a и b, нового массива, содержащего элементы из b, которых не существует в массиве a. Например:

 a = [1,2,3,4]
b = [0,3,5]
return = [0, 5]
  

Но элементы — это массивы, например:

 a = [["a","fd","asfd"],["adsf","fdf","dsf"]
  

Я много пробовал, но ничего не происходит. Это мой код:

 function clean(a, b){
var ln = a.toString()
  for(var i = 0, length = b.length; i < length; i  ) {

      if(-1 !== ln.indexOf(String(b[i]))){
        b.splice(ln.indexOf(b[i].toString()), 1)
      }
  }
  return shorter;
}
  

Это не работает.

Ответ №1:

Попробуйте это —

 a = [1,2,3,4]
b = [0,3,5]

function clean(a, b){
  var bb = b.slice(0); //making sure we are not changing the actual array
  for(var i = 0; i < a.length; i  ){
    var index = bb.indexOf(a[i]);
    if(index > -1){
      bb.splice(index, 1);
    }
  }
  return bb;
}

console.log(clean(a,b));
console.log(b);
  

Вывод :

 [0, 5]
[0, 3, 5]
  

Ответ №2:

Я попробовал следующее, и это сработало нормально.

 var b = [0,3,5];
var a = [1,2,3,4];
var ret = []
for(var i=0;i<b.length;i  ){
   var flag =0;
   for(var j=0;j<a.length;j  ){
      if(a[j]===b[i]){
      flag=1;
      }
    }
   if(flag==0)
     {
     ret.push(b[i]);
     }
  }
 console.log(ret);
  

Ответ №3:

 // The question has two parts:

// The second in order of the question is: 
// Make a flat list from a two-dimensional array: 
aFlat = [].concat.apply([],a);  

// The first is: Get all elements from b 
// that are not contained in a (resp. aFlat):
c = b.filter( function(element) { return aFlat.indexOf(element) == -1 });