Как удалить массив из массива в JavaScript (Angular6)? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть этот массив

var a = [[1,3][2,3],[3,4],[6,7]];
var b =[[1,3],[2,3]];

Я хочу удалить массив b из a.

Я пробовал

var arr = [[1,3],[2,3]];
var b = [1,3];
var arr = arr.filter((el)=> !b.includes(el));
console.log(arr);

, но он возвращает тот же массив "arr".Он не удаляет массив "b", образует массив "arr".

Ответы [ 4 ]

0 голосов
/ 23 октября 2018
var my_array = ["raj","bob","clreak","kevin","dJ"];
var start_index = 0
var number_of_elements_to_remove = 1;
var removed_elements = my_array.splice(start_index, number_of_elements_to_remove);
0 голосов
/ 23 октября 2018

Вы можете искать в индексе, структурируя внутренний массив и проверяя его на стригированный массив b.Затем проверьте индекс и склейте.

var a = [[1, 3], [2, 3]],
    b = [1, 3],
    index = a.findIndex(
        (json => inner => JSON.stringify(inner) === json)
        (JSON.stringify(b))
    );
    
if (index !== -1) {
    a.splice(index, 1);
}

console.log(a);
0 голосов
/ 23 октября 2018

В случае упрощенного варианта использования , где порядок предметов, количество предметов, стоимость предметов будут одинаковыми, вы можете попробовать выполнить следующее:

var a = [[1,3], [2,3]];
var b =[1,3];
a = a.filter(v=> v.join() !== b.join());
console.log(a);

Если вы хотите рассмотреть порядок, количество и стоимость, пожалуйста, следуйте

var a = [[1,3], [2,3]];
var b =[1,3];
// Create a map where key is item and value is its occurence
let bObj = b.reduce((ac, c) => Object.assign(ac, {[c]: (ac[c] || 0) + 1}), {});
a = a.filter(v=> {
  // For every value, create a copy of bObj
  let temp = {...bObj};
  // for every value in item, decrements the value by 1
  v.forEach(e => temp[e] = (temp[e] || 0) - 1);
  // Get all the values of object
  let tempValues = Object.values(temp);
  // If all values are 0, then it is an exact match, return false else return true
  if(new Set(tempValues).size === 1 && tempValues[0] === 0) return false;
  return true;
});
console.log(a);

РЕДАКТИРОВАТЬ

var a = [[1,3],[2,3],[3,4],[6,7]];
var b = [[1,3],[2,3]];
// Create a map where key is item and value is its occurence
let bObj = b.map(v => v.reduce((ac, c) => Object.assign(ac, {[c]: (ac[c] || 0) + 1}), {}));
a = a.filter(v=> {
  // For every value, create a copy of bObj
  let temp = JSON.parse(JSON.stringify(bObj));
  // for every value in item, decrements the value by 1
  v.forEach(e => temp.forEach(t => t[e] = (t[e] || 0) - 1));
  return !temp.some(t => {
    // Get all the values of object
    let tempValues = Object.values(t);
    // If all values are 0, then it is an exact match, return false else return true
    return (new Set(tempValues).size === 1 && tempValues[0] === 0)
  });
});
console.log(a);
0 голосов
/ 23 октября 2018

Сначала вы можете найти index на arr, который хотите удалить, используя операцию every(), затем splice() it:

var arr = [[1,3],[2,3]];
var b = [1,3];
var index = arr.findIndex(item => item.every(elem => b.includes(elem)));
arr.splice(index,1);
console.log(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...