Нахождение одинаковых элементов в двух массивах и замена в одном
У меня есть два массива в них есть похожие элементы, как осуществить поиск по похожим элементам с заменой, предположим на ноль. У меня не получается это сделать.
Два массива var arrF = [3, 5, 8]; var arrS = [1, 2, 3, 5, 8]; Должно получится 1, 2, 0, 0, 0, а выходит 8,8,0,0,0. Как это можно исправить? Я хочу знать как это сделать только с помощью циклов никаких встроенных функций js не надо. Чтобы было проще использовать скрипт для других языков программирования. Вот моя попытка это сделать: $(document).ready(function(e){ var arrF = [3, 5, 8]; var arrS = [1, 2, 3, 5, 8]; var nums = [0,0,0,0,0]; function getIntersect(arrF, arrS){ for ( var i = 0; i < arrF.length; i++ ){ for ( var j = 0; j < arrS.length; j++ ){ if ( arrF[i] == arrS[j] ){ nums[i] = 0; } else { nums[i] = arrS[j]; } } } return nums; } document.write(getIntersect(arrF, arrS)); }); |
<script> var arrF = [3, 5, 8]; var arrS = [1, 2, 3, 5, 8]; function getIntersect(arr1, arr2) { if (arr1.length < arr2.length) { [arr1, arr2] = [arr2, arr1]; } for (var i = 0; i < arr1.length; i++) { for (var j = 0; j < arr2.length; j++) { if (arr1[i] === arr2[j]) { arr1[i] = arr2[j] = 0; } } } return [arr1, arr2]; } alert(JSON.stringify(getIntersect(arrF, arrS))); </script> вариант :) |
На php не запускается, не знаю как эту строчку переделать.
[arr1, arr2] = [arr2, arr1]; |
list($arr1, $arr2)=[$arr2, $arr1];
это обмен значений переменных без использования третей переменной или так $arr1=[$arr2,$arr2=$arr1][0]; |
Katy93,
массивы отсортированы по возрастанию? |
Немного не корректно. Мы предполагаем, что все элементы в массивах разные. А если есть повторяющиеся?
Тогда так <script> var arrF = [3, 5, 8, 1, 3, 6]; var arrS = [1, 8, 2, 3, 5, 8, 3, 1, 5, 7, 9]; function getIntersect(arr1, arr2) { let aj =[] if (arr1.length < arr2.length) { [arr1, arr2] = [arr2, arr1]; } for (var i = 0; i < arr1.length; i++) { let zer = false for (var j = 0; j < arr2.length; j++) { if (arr1[i] === arr2[j]) { zer = true aj.push(j) } } if (zer) arr1[i] = 0; } aj.forEach(j => arr2[j] = 0) return [arr1, arr2]; } alert(JSON.stringify(getIntersect(arrF, arrS))); </script> |
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
$diff = array_diff($arrS, $arrF); //$diff будет иметь только те значения, которых нет в массиве $arrF |
Цитата:
По пиэйчпивси это будет for ($k = 0; $j < count($aj); $k++) { $arr2[$aj[$k]] = 0; } |
Часовой пояс GMT +3, время: 21:18. |