25.02.2020, 14:53
|
Кандидат Javascript-наук
|
|
Регистрация: 28.12.2018
Сообщений: 138
|
|
Нахождение одинаковых элементов в двух массивах и замена в одном
У меня есть два массива в них есть похожие элементы, как осуществить поиск по похожим элементам с заменой, предположим на ноль. У меня не получается это сделать.
Два массива
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));
});
|
|
25.02.2020, 15:12
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
<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>
вариант
|
|
25.02.2020, 15:32
|
Кандидат Javascript-наук
|
|
Регистрация: 28.12.2018
Сообщений: 138
|
|
На php не запускается, не знаю как эту строчку переделать.
[arr1, arr2] = [arr2, arr1];
|
|
25.02.2020, 15:43
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
list($arr1, $arr2)=[$arr2, $arr1];
это обмен значений переменных без использования третей переменной
или так
$arr1=[$arr2,$arr2=$arr1][0];
|
|
25.02.2020, 16:37
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Katy93,
массивы отсортированы по возрастанию?
|
|
25.02.2020, 17:39
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Немного не корректно. Мы предполагаем, что все элементы в массивах разные. А если есть повторяющиеся?
Тогда так
<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>
Последний раз редактировалось voraa, 25.02.2020 в 17:48.
|
|
25.02.2020, 17:52
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Katy93
|
Чтобы было проще использовать скрипт для других языков программирования.
|
Для каких?
|
|
25.02.2020, 22:04
|
Кандидат Javascript-наук
|
|
Регистрация: 28.12.2018
Сообщений: 138
|
|
Например для php. Вот сейчас, я пыталась перенести javascript код на php.
Цитата:
|
$arrF = array(3, 5, 8, 1, 3, 6);
$arrS = array(1, 8, 2, 3, 5, 8, 3, 1, 5, 7, 9);
function getIntersect($arr1, $arr2) {
$aj = array();
if (count($arr1) < count($arr2)) {
list($arr1, $arr2)=array($arr2, $arr1);
}
for ($i = 0; $i < count($arr1); $i++) {
$zer = false;
for ($j = 0; $j < count($arr2); $j++) {
if ($arr1[$i] === $arr2[$j]) {
$zer = true;
array_push($aj,$j);
}
}
if ($zer) $arr1[$i] = 0;
}
$aj.foreach($j => $arr2[j] = 0)
return $arr1;
}
echo "====================================";
echo "<pre>";
print_r(getIntersect($arrF, $arrS));
echo "<pre>";
echo "====================================";
|
В итоге мне выдало сообщение.
Цитата:
|
Parse error: syntax error, unexpected T_FOREACH in <C:\<PATH>\
|
Не поддерживает php, такой цикл как
Цитата:
|
$aj.foreach($j => $arr2[j] = 0);
|
Можно как-нибудь по другому записать?
|
|
25.02.2020, 22:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Katy93
|
Например для php.
|
А для РНР все это не имеет смысла. Если вам нужно получить определенные элементы массивов, то для этого в нем есть 10 функций пересечений массивов - 5 вычисляют расхождения массивов, 5 схождения. Для вашего случая на РНР достаточно:
$diff = array_diff($arrS, $arrF); //$diff будет иметь только те значения, которых нет в массиве $arrF
|
|
25.02.2020, 23:38
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от Katy93
|
Например для php. Вот сейчас, я пыталась перенести javascript код на php.
В итоге мне выдало сообщение.
Не поддерживает php, такой цикл как
Можно как-нибудь по другому записать?
|
aj.forEach(j => arr2[j] = 0)
По пиэйчпивси это будет
for ($k = 0; $j < count($aj); $k++) {
$arr2[$aj[$k]] = 0;
}
|
|
|
|