Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.02.2020, 14:53
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 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));
});
Ответить с цитированием
  #2 (permalink)  
Старый 25.02.2020, 15:12
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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>

вариант
Ответить с цитированием
  #3 (permalink)  
Старый 25.02.2020, 15:32
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

На php не запускается, не знаю как эту строчку переделать.
[arr1, arr2] = [arr2, arr1];
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2020, 15:43
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

list($arr1, $arr2)=[$arr2, $arr1];
это обмен значений переменных без использования третей переменной
или так
$arr1=[$arr2,$arr2=$arr1][0];
Ответить с цитированием
  #5 (permalink)  
Старый 25.02.2020, 16:37
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Katy93,

массивы отсортированы по возрастанию?
Ответить с цитированием
  #6 (permalink)  
Старый 25.02.2020, 17:39
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 25.02.2020, 17:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Katy93
Чтобы было проще использовать скрипт для других языков программирования.
Для каких?
Ответить с цитированием
  #8 (permalink)  
Старый 25.02.2020, 22:04
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 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);
Можно как-нибудь по другому записать?
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2020, 22:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Katy93
Например для php.
А для РНР все это не имеет смысла. Если вам нужно получить определенные элементы массивов, то для этого в нем есть 10 функций пересечений массивов - 5 вычисляют расхождения массивов, 5 схождения. Для вашего случая на РНР достаточно:

$diff = array_diff($arrS, $arrF); //$diff будет иметь только те значения, которых нет в массиве $arrF
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2020, 23:38
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 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;
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение всех элементов двух массивов. sharun Общие вопросы Javascript 27 14.05.2018 15:38
Динамическа замена элементов, нужна помошь Lyapisinka Общие вопросы Javascript 3 30.03.2017 15:19
Подсчет одинаковых элементов в массиве Mayder Общие вопросы Javascript 4 13.11.2016 22:35
Создать несколько одинаковых элементов dulingleb Общие вопросы Javascript 3 29.06.2014 21:17
Сгенерировать 2 последовательности и узнать сколько в них одинаковых элементов Ирина Владимировна Общие вопросы Javascript 10 24.03.2012 18:18