Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99

Как передать параметром ассоциативный массив в функцию

15.02.2022, 17:36. Показов 7519. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Не пойму, что именно требуется в условии задачи:

Функция f4 жестко привязана к массиву a4. Это не удобно. Давайте напишем функцию f5, которая принимает массив как параметр и выводит его в формате указанном в функции в указанный блок (как второй параметр).
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let b1 = document.querySelector('.b-1');
 
b1.addEventListener('click', () => {
    f5();
});
 
let a4 = {                   // сам ассоциативной массив я так понимаю, должен быть во внешней области видимости, чтобы передавать в него значения 
                                    из других функций 
    "one" : "hello",
    "two" : "mahai",
    "five" : "hi"
};
 
function f5() {
     return console.log(a4);
}
Я ещё ни разу не пробовал передавать что-то в ассоциативный массив, на правильном ли я пути?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2022, 17:36
Ответы с готовыми решениями:

jquery, как передать параметром в функцию, другую функцию
Например: Есть функция: function check_number(tel, function2) { $.ajax({ type: "GET", url: "/inc/ajax.php", ...

Как ассоциативный массив из PHP передать в Ajax и вывести на страницу
Добрый день. В name.php я получаю из БД - ассоциативный массив $rows. Ajax принимает этот массив, но выводит на экран Array ...

Как передать событию OnClick функцию с параметром?
Добрый вечер. Разбираюсь с RunTime в Lazarus. В ini файле хранится список приложений, которые должны будут запускаться по клику на TLabel....

27
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
15.02.2022, 18:22
Для начала давайте ещё раз внимательно прочитаем условие и найдём слово "ассоциативный"
Функция f4 жестко привязана к массиву a4. Это не удобно. Давайте напишем функцию f5, которая принимает массив как параметр и выводит его в формате указанном в функции в указанный блок (как второй параметр).
Вы это слово сами придумали?
0
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
15.02.2022, 18:29  [ТС]
Цитата Сообщение от klyapa Посмотреть сообщение
Вы это слово сами придумали?
Согласен, в условии об этом не говорится, но сама задача на тему ассоциативные массивы.

Если по существу, мне удалось продвинуться в следующем:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let b1 = document.querySelector('.b-1');
 
b1.addEventListener('click', () => {
    f5('six', 7);
});
 
let a4 = {
    "one" : "hello",
    "two" : "mahai",
    "five" : "hi"
};
 
function f5(key, value) {
    a4.key = value;
    return console.log(a4);
}
В консоли я вижу успешно добавленное нужное значение. Вопрос в том, это ли требовалось в условии задачи, и если я не прав, то как правильно?
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
15.02.2022, 19:15
Лучший ответ Сообщение было отмечено kish2015 как решение

Решение

Цитата Сообщение от kish2015 Посмотреть сообщение
Вопрос в том, это ли требовалось в условии задачи
Я вижу в условии, что нужно запилить функцию f5(), которая принимает, как я понял, два параметра: ассоциативный массив (т.е. попросту объект) и "указанный блок" (видимо какой-то html-элемент). И функция выводит в этот блок тот самый "ассоциативный массив", в указанном формате. Теперь осталось догадаться, что это за формат ..

Не по теме:

Да кто вообще эти задания пишет?


Попробуем предположить, что нужно просто вывести на страницу (в блок) пары ключ:значение объекта, переданного в первом параметре. Так вижу. А вот добавления нового свойства в объект я в задании не вижу.

Добавлено через 20 минут
Как-то так, видимо...
HTML5
1
<div id="box"></div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let box = document.getElementById('box');
 
let a4 = {
    "one" : "hello",
    "two" : "mahai",
    "five" : "hi"
};
 
function f5(arr, elem) {
    let ul = `<ul>`;
    for(let [prop, val] of Object.entries(arr)) {
        ul += `<li>Ключ: "${prop}" | Значение: "${val}"</li>`;
    }
    ul += `</ul>`;
    elem.innerHTML = ul;    
}
 
f5(a4, box);
1
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
15.02.2022, 19:17  [ТС]
Итак, по порядку:

Я вижу в условии, что нужно запилить функцию f5(), которая принимает, как я понял, два параметра: ассоциативный массив (т.е. попросту объект) и "указанный блок" (видимо какой-то html-элемент). И функция выводит в этот блок тот самый "ассоциативный массив", в указанном формате. Теперь осталось догадаться, что это за формат ..
Я не очень понимаю, если через параметры функции f5 от меня не требуется добавить в объект новое сочетание ключ - значение, то для чего нужна тогда сама функция? Вернуть через цикл for in переданное в неё имеющееся значение в элемент на странице? Скажем, вывести просто на страницу это значение?

JavaScript
1
2
3
4
function f5(key, value) {
    a4.key = value;
    return console.log(a4);
}
Цитата Сообщение от klyapa Посмотреть сообщение

Не по теме:

Да кто вообще эти задания пишет?

Ну бывают перегибы, конечно, но большинство задач для отработки по темам интересные
Цель этого топика для меня самого понять, правильно ли я работаю с объектом, передавая для него значения через параметры функции, тут не столько самоцель - разобраться в сути самой задачи, как научиться правильно работать с объектами.
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
15.02.2022, 19:38
Если у вас функция, кот. добавляет в объект пару key: value, то тогда не нужно снова жестко привязываться к определённому объекту. Попробуйте передавать в функцию, тогда уж, три параметра: сам объект, ключ и значение.
JavaScript
1
2
3
4
5
6
function f5(obj, key, value) {
    obj[key] = value;
    console.log(obj);
}
 
f5(a4, 'newProperty', 'newValue');
Тогда вы сможете добавлять свойства/значения не одному только объекту a4, а тому, который передадите в первом параметре.
1
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
15.02.2022, 19:47  [ТС]
klyapa,
я не догадался ещё и сам объект передать параметром, поэтому жёстко привязывался к нему в коде самой функции. Ваше решение удобное, универсальное, и учит хорошему, спасибо!
0
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
16.02.2022, 17:19  [ТС]
klyapa,
ещё такой момент,

JavaScript
1
2
3
4
5
6
function f5(obj, key, value) {
    obj[key] = value;
    console.log(obj);
}
 
f5(a4, 'newProperty', 'newValue');
в консоли объект выведется, это ясно. А если на страницу, то только через цикл или проще можно?
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
16.02.2022, 18:18
Цитата Сообщение от kish2015 Посмотреть сообщение
А если на страницу, то только через цикл или проще можно?
Если вы попытаетесь просто вывести на страницу объект, то получите вот это - [object Object]. Поэтому объект нужно "развернуть". Обычно пользуются циклом. Самый простой способ - перевести объект в массив и уже его вывести. Презентабельности не будет )
JavaScript
1
2
3
4
5
6
function f5(obj, key, value) {
    obj[key] = value;
    document.body.insertAdjacentHTML('afterBegin', `<div>${Object.entries(obj).join(' | ')}</div>`);
}
 
f5(a4, 'newProperty', 'newValue');
Добавлено через 3 минуты
Или вот так ... ещё проще
JavaScript
1
2
3
4
5
6
function f5(obj, key, value) {
    obj[key] = value;
    document.body.insertAdjacentHTML('afterBegin', `<div>${JSON.stringify(obj)}</div>`);
}
 
f5(a4, 'newProperty', 'newValue');
1
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
16.02.2022, 19:19  [ТС]
klyapa,
JavaScript
1
JSON.stringify(obj)
я уже попробовал, он вывел мне на страницу сам объект, "как есть", такой подход я не оценил

JavaScript
1
2
3
4
5
6
7
8
Или вот так ... ещё проще
 
function f5(obj, key, value) {
    obj[key] = value;
    document.body.insertAdjacentHTML('afterBegin', `<div>${JSON.stringify(obj)}</div>`);
}
 
f5(a4, 'newProperty', 'newValue');
Интересное решение через
JavaScript
1
insertAdjacentHTML
, буду им пользоваться.
klyapa,
вообщем как всегда вдохновляете, благодарю!
0
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
18.02.2022, 21:11  [ТС]
Ещё интересный момент, если объект содержит 0 элемент:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
let i1 = document.querySelector('.i-1');
let b1 = document.querySelector('.b-1');
 
b1.addEventListener('click', () => {
    f7(a7);
});
 
let a7 = {'one': 7, 'two': 2, 'three': 0};
 
function f7(obj, key, value) {
    let iValue = +i1.value;
 
    for (const key in obj) {
        if (obj[key] === iValue) {
            out1.innerHTML = 1;
            break;
        }
 
        if (iValue == '') {
            break;
        }     
 
        if ((obj[key] !== iValue) && (iValue !== '')) {
            out1.innerHTML = 0;
        }
    }
}
Я заметил, что 0 в условия даже не попадает, как в этой ситуации быть?
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
18.02.2022, 21:37
Цитата Сообщение от kish2015 Посмотреть сообщение
Я заметил, что 0 в условия даже не попадает, как в этой ситуации быть?
kish2015, давайте html. Нужно видеть, что это у вас за элементы: i1, b1, out1. Кроме того, избегайте одинаковых имён переменных, из-за этого могут возникнуть ошибки. Переменная key является вторым аргументом функции f7(). В цикле for in, вы инициализируете переменную с таким же именем.
Я не буду даже разбирать в коде, пока вы весь html не дадите.
0
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
18.02.2022, 23:47  [ТС]
HTML5
1
2
3
4
5
6
<div class="out5" data-b="дата-атрибут"></div>
    <div class="out1" data-b="дата-атрибут"></div>
 
    <input type="text" value="" class="i-1">
    
    <button class="b-1">Жми</button>
0
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
19.02.2022, 12:17  [ТС]
Вообщем проблема в преобразованиях типов и самих условиях

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function f7(obj, key, value) {
    let iValue = i1.value;   // Если тут я удаляю +, то в условиях будет проверятся строковый тип
 
    for (const key in obj) {
        if (obj[key] == iValue) {
            out1.innerHTML = 1;
            break;
        }
 
        if (iValue == '') {
            break;
        }     
 
        if ((obj[key] !== iValue) && (iValue !== '')) {   // вот тут вторым логическим && я  пробовал (iValue != null), тогда все значения из объекта это условие забирает.
            out1.innerHTML = 0;
        }
    }
}
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
19.02.2022, 18:04
Лучший ответ Сообщение было отмечено kish2015 как решение

Решение

Цитата Сообщение от kish2015 Посмотреть сообщение
проблема в преобразованиях типов и самих условиях
Вот именно ... Прежде, чем что-то преобразовывать, нужно посмотреть с чем дело имеете. Например, если поставить + к пустой строке или строке с пробелами, то результатом будет 0.
JavaScript
1
2
+"" === 0 // true
+"       " === 0 // true
Поэтому проверять value из input-а, лучше на количество символов length, после удаления пробелов в начале и в конце, методом trim()
JavaScript
1
if ( !input.value.trim().length ) // точно ничего нет
или проверять на идентичность, если в value будет "0" [type string]
JavaScript
1
2
if ('0' == false) // true
if ('0' === false) // false
1
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
20.02.2022, 15:31  [ТС]
klyapa,
спасибо, решение замечательное! До вашего ответа я находил решения с регулярными выражениями, но всё это пока для меня сложно.

Цитата Сообщение от klyapa Посмотреть сообщение
+"" === 0 // true
+"       " === 0 // true
if ('0' == false) // true
if ('0' === false) // false

сохранил себе это как в памятку. На этих моментах спотыкаюсь ещё очень часто, хотя и выглядит просто, все мы в эти теоретические нюансы как-то бегло вникаем, но на практике когда сталкиваюсь, выясняется, что продолжаю упускать, с чем именно имею дело. В итоге код не работал желаемым образом.
1
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
20.02.2022, 15:44
kish2015, вы напишите себе функцию, которая принимает параметром какой-нибудь объект (строка, объект, массив, функция), не важно, и максимально соберите с этого объекта информацию: какой тип, длина length, если это строка, если массив, то сколько элементов в нём и что это за элементы, если объект, то перечислите свойства и значения, и т.д. В общем, это будет неплохая практика для вас.
0
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
24.02.2022, 20:40  [ТС]
Уже 3 час сижу и всё никак Нужно вывести из вложенного массива все цифры, которые больше 30.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let a17 = {
    'age': [20,30,35,40,5,8,9,15,16]
};
 
let result = '';
function f17(arr) {
    for (const key in arr) {
        if (arr[key] > 30) {        // условие в цикле почему-то не выполняется, если я задам  if (arr[key]), то все числа выводятся.
            result += arr[key] + '';
        }
    }
 
    out1.innerHTML = result;
}
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
24.02.2022, 21:04
Лучший ответ Сообщение было отмечено kish2015 как решение

Решение

kish2015, вы неправильно подошли к реализации. У вас в цикле, в arr[key] попадает не текущий элемент массива, а весь массив, который вы сравниваете с цифрой 30. Поэтому у вас ничего "не работает".

Добавлено через 9 минут
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let a17 = {
    'age': [20, 30, 35, 40, 5, 8, 9, 15, 16]
};
 
let result = '';
 
function f17(arr) {
  for (const key in arr) {
    for (let i = 0; i < a17[key].length; i++) {
      if (arr[key][i] > 30) {
        result += arr[key][i] + ',';
      }
    }
  }
  out1.innerHTML = result;
}
f17(a17);
1
6 / 6 / 2
Регистрация: 27.08.2015
Сообщений: 99
24.02.2022, 22:07  [ТС]
Цитата Сообщение от klyapa Посмотреть сообщение
kish2015, вы неправильно подошли к реализации. У вас в цикле, в arr[key] попадает не текущий элемент массива, а весь массив, который вы сравниваете с цифрой 30. Поэтому у вас ничего "не работает".
Абсолютно с вами согласен. В консоли я видел, что выводится массив целиком, а условие проверяется только один раз, но не мог понять, как использовать обычный for. Я понимаю, вложить один цикл в другой вроде бы и самое очевидное, но я думал, что раз я уже перебрал одним циклом вложенный массив, то нужно ещё к этому что-то добавить, что бы появился перебор каждого элемента в отдельности. Крутил-вертел, а оказалось, что нужно сочетать методы решений. Сложно сказать, "постеснялся" попробовать поэкспериментировать или что-то ещё, но очень благодарен вам за помощь и небольшой толчок вперёд.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2022, 22:07
Помогаю со студенческими работами здесь

Как передать параметр в функцию, саму являющуюся параметром?
например, в setTimeout.

Как в конструкторе класса передать параметром указатель на функцию?
Друзья! Вот тут всё понятно, есть класс, в котором приватная функция f_0, в конструкторе передаётся указатель на функцию f_1. Эта функция...

Как передать параметр в функцию которая является параметром другой функции?
Как передать параметр в функцию которая является параметром другой функции? drawRight(moveLeft(500));// it does not work!

Передать ассоциативный массив из JS в PHP используя AJAX
Ребят, сделайте подарок перед Новым годом, помогите разобраться! Имеется код: function Save() { ...

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru