Как проверить наличие вложенного массива в массиве с помощью javascript

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

Например

Предположим, у меня есть такой массив

[
  [-5, 0, 5], [-5, 2, 3], 
  [-3, 0, 3,], [-3, 1, 2], 
  [-1, -1, 2], [-1, 0, 1]
]

и получил еще одну пару, как [-3, 1, 2] добавить, но он уже доступен в существующих данных, поэтому необходимо проверить и не добавлять.

Что я пробовал до сих пор

let mapped = result.map(item => item.join());
let match = `${item1},${item2},${item3}`; // coming items => item1, item2, item3 
if (mapped.includes(match)){
 ...
} else {
 ...
}

Можно ли это использовать или есть лучший способ проверить это, когда у нас есть огромное количество данных?

как часто вы хотели бы добавить еще один массив? Вы пытались использовать хэш-карту?

Nina Scholz 26.06.2023 16:32

Вы можете изучить использование наборов. По определению элементы в наборе должны быть уникальными.

mykaf 26.06.2023 16:40

@NinaScholz Если я использую карту, то как проверить наличие нового повторяющегося массива на карте, поскольку это массив

akhtarvahid 26.06.2023 16:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
51
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используя методы массива .find() и .every():

const 
      arr = [
        [-5, 0, 5], [-5, 2, 3], 
        [-3, 0, 3,], [-3, 1, 2], 
        [-1, -1, 2], [-1, 0, 1]
      ],
      
      input = [-3, 1, 2],
      
      isIn = (a,b) => b.find(x => x.every((y,i) => y === a[i]))?.length > 0;
      
console.info( isIn(input, arr), arr.length );

isIn(input, arr) || arr.push(input);

console.info( arr.length );

isIn([-3, 1, -2], arr) || arr.push([-3, 1, -2]);

console.info( arr.length );

Я бы просто перебрал ваш массив и проверил, равен ли элемент элементу, который вы хотите добавить. Предполагая, что вы имеете дело только с числами, вы можете проверить это, преобразовав массив в строку.

const data = [
  [-5, 0, 5],
  [-5, 2, 3],
  [-3, 0, 3],
  [-3, 1, 2],
  [-1, -1, 2],
  [-1, 0, 1]
];
const toAdd = [-3, 1, 2];

const isRowIncludedInMatrix = (matrix, row) =>
  matrix.some(r => r.toString() === row.toString());

if (!isRowIncludedInMatrix(data, toAdd)) // => false -> don't push
  data.push(toAdd);

Если это единственные данные, с которыми вам приходится работать, лучше всего будет провести простое сравнение.

Функции some() и every() завершатся досрочно:.

function addIfNotExists(arrays, newArray) {
  if (!arrays.some(x => x.length === newArray.length && x.every((e, i) => e === newArray[i])))
    arrays.push(x);
}

Другие вопросы по теме