Есть массив section = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]];
И массив numbers = [2,3,5,8,10,14,15];
Как определить, какие числа из numbers есть в подмассиве section в количестве более, чем 1 шт.?
Например, числа 10, 14 есть в подмассиве section[2], т.е. [2, 6, 10, 14].
Пробовал так:
let result = [];
for (let a = 0; a < section.length; a++) {
let arr = [];
for (let i = 0; i <= numbers.length; i++) {
if (section[a].includes(numbers[i])) {
arr.push(numbers[i])
}
}
if(arr.length>1) {
result.push(arr);
}
console.log(result)
}
Не сработало. Как это можно сделать?
не знаю, тут, мне кажется, даже рекурсия не нужна.
const section = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]];
const numbers = [2,3,5,8,10,14,15];
const result = section
.map(subs => // map сделает новый массив где значениями будут пересечения значений numbers и подсекции
subs.filter(number=>numbers.includes(number)) // просто удалим все значения не входящие в numbers из subs, вернем
).filter(r => r.length>1); //я правильно понимаю, что нужно удалить пустые массивы ? (тут же проверим что длина >1)
console.log(result);
оставлю для истории, если нужен вдруг список чисел все таки
const section = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]];
const numbers = [2,3,5,8,10,14,15];
const result = new Set(); //без Set придется проверять наличие в результатах или держать объект вида {number: true}
for (let subs of section) {
let found = subs.filter(number=>numbers.includes(number));
if (found.length>1) {
found.forEach(number=>result.add(number));
}
}
console.log(Array.from(result));
var section = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]];
var numbers = [2,3,5,8,10,14,15];
function diff(sourceArr, compareArr) {
return sourceArr.filter(function(i) {
return compareArr.indexOf(i) != -1;
});
}
var output = [];
for (let i = 0; i < section.length; i++) {
var diffArr = diff(section[i], numbers);
output.push( diffArr.length > 1 ? diffArr : [] );
}
console.log(output);
функция diff - для определения совпадения элементов массивов, в котором фильтруем элементы, если они не совпали по условию indexOf(i) != -1, где indexOf - возвращает индекс первого вхождения указанного значения в объект и возвращает -1, если значение не найдено.
Далее в цикле к каждому подмассиву section применяем функцию. И если количество совпавших элементов >1, то заносим его в output, если нет - то заносим пустой массив (если это нужно);
Я тоже не совсем всё понял в твоей задаче. Например, ты пишешь что в количестве более, чем 1 шт. - это значит 2, 3, и т.д., но тебе ведь, судя по примеру, и одно вхождение подходит? Также не понял зачем ты во втором цикле ставишь меньше или равно:
i <= numbers.length
По-моему знака меньше тут достаточно. Ну и вот попробуй решение:
section = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]];
numbers = [2,3,5,8,10,14,15];
var result = [];
for (let a = 0; a < section.length; a++) {
let arr = [];
for (let i = 0; i < numbers.length; i++) {
let arrStr = ',' + section[a].join() + ',';
let numbStr = ',' + numbers[i] + ',';
if ( ~arrStr.indexOf( numbStr ) ) {
arr.push(numbers[i])
}
}
arr.length && result.push(arr);
}
console.log(result);
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники