Есть массив 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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Решил разобрать маленький фреймворк Sortable (для сортировки элементов на странице) и не могу понять небольшой кусок кода
Документация по синтаксису шаблонов, шаблонизатора bem-xjst, предикатыК первому подпредикату показан и объяснен пример, который не работает
То есть мне нужно что бы массив в js начинался не с 0, а с 1При этом не удаляю никаких элементов