Я хочу удалить массив из массива массивов без итерации по ним.
первый массив выглядит так:
array1 = [
[
[{"id":"A1","y":12},{"id":"A4","y":12}],
[{"id":"A2","y":1}],
[{"id":"A3","y":6}]
]
второй массив:
array2 = [{"id":"A1","y":12},{"id":"A4","y":12}]
Я использую javascript и хочу удалить array2 из array1.
Извините за неправильное описание, кстати, я обнаружил, что в моем примере второй массив массива
array2 = [{ "id": "A1", "y": 12 }, { "id": "A4", "y": 2 }]
Таким образом, два массива имеют только один равный столбец. Как я могу удалить array1 из array2, даже если у них есть только один равный атрибут?
Спасибо.
array1 не тот, есть лишний [id's уникален?
id не уникален



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это выглядит странно, но вы можете проверить каждый элемент массива и сопоставить его со вторым массивом. В любом случае вам нужно перебрать ваш массив. Просто набрать array1[i] == array2 нельзя, надо по другому проверять. Хакерство состоит в том, чтобы преобразовать их в JSON и сравнить строки, но есть другие методы, которые вы можете использовать для сравнения массивов.
Вот простая демонстрация с циклом for
array1 = [
[{ "id": "A1", "y": 12 }, { "id": "A4", "y": 12 }],
[{ "id": "A2", "y": 1 }],
[{ "id": "A3", "y": 6 }]
]
array2 = [{ "id": "A1", "y": 12 }, { "id": "A4", "y": 12 }]
l = array1.length
for (var i = 0; i < l; i++) {
// if arrays match
if (JSON.stringify(array1[i]) == JSON.stringify(array2)) {
// delete the element at `i` position
array1.splice(i, 1);
i--;
l--;
// break; // if you can guarantee that no more instances will occur
}
}
console.info(array1)я обнаружил, что в моем примере второй массив массивов - это array2 = [{"id": "A1", "y": 12}, {"id": "A4", "y": 2}] Итак, два массива есть только один равный столбец. Как я могу удалить array1 из array2, даже если у них есть только один равный атрибут?
сращивание обычно используется для удаления определенного элемента из массива. Я думаю, вы хотите сделать что-то вроде этого:
var array = [
[{"name": "sik", "gender": "male"}],
[{"name": "sug", "gender": "female"}],
[{"name": "hyd", "gender": "male"}]
];
// it removes the second array from the array: removes the female one.
array.splice( 1, 1 );
Описание: Функция splice принимает два аргумента: первый - для индекса элемента, а второй - до того, сколько вы хотите удалить.
Например: splice (2, 5) - означает, что: из индекса 2, продолжать удаление до элементов 5.
Надеюсь, это поможет, спасибо.
В обычном Javascript мы не можем их фильтровать. Это будет работать, если вы имеете дело с ценными типами данных. Здесь вы сравниваете массивы, которые являются ссылочным типом данных. так что здесь нам нужно написать наш собственный стек поиска
function searchForArray(haystack, needle){
var i, j, current;
for(i = 0; i < haystack.length; ++i){
if (needle.length === haystack[i].length){
current = haystack[i];
for(j = 0; j < needle.length && needle[j] === current[j]; ++j);
if (j === needle.length)
return i;
}
}
return -1;
}
var arr = [[1,3],[1,2]];
var n = [1,3];
console.info(searchForArray(arr,n));
Вы можете сослаться на этот вопрос, который также имеет некоторые справочные ресурсы. Проверить, существует ли массив в массиве массивов?
Я знаю, что вы просили решение без итерации, но я просто подумал дать представление о ссылках, которые могут быть вам полезны.
Array.filter.Array.includes