Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 08.04.2020
Сообщений: 18
1

Прошу Вас подсказать по 2-м небольшим фрагментам кода

08.04.2020, 14:43. Показов 290. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья, помогите, пожалуйста мне вот с таким кодом:
1)
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
array = [1, 2, 3];
    function arrayToList_1(array) {
      let list = {value: null, rest: null};
      while (array.length != 0) {
        list["value"] = array.shift();
        if (array.length != 0) {
          list = list.rest;
        } else {
          list.rest = null;
        }
      }
      return list;
    }
    console.log(arrayToList_1(array));
>

Код не работает. Пишет "Cannot set property 'value' of null".
А должен выдавать вот такой результат {value: 1, rest: {value: 2, rest: {value: 3, rest: null}}}


2) А вот как предлагается решить эту задачу в книге "Выразительный Javascript":
Javascript
1
2
3
4
5
6
7
function arrayToList(array) {
  let list = null;
  for (let i = array.length - 1; i >= 0; i--) {
    list = {value: array[i], rest: list};
  }
  return list;
}
По этому коду у меня тоже вопрос (точнее по пониманию рекурсии): list постоянно будет создавать новый уровень списка со со значениями от 3 до 1 и когда будет 1 он ничего не создаст и подставит вместо list --> null? Но ведь null должен быть после значения 3 а на 1. Можете подробно описать как тут работает рекурсия?

Заранее огромное спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2020, 14:43
Ответы с готовыми решениями:

Прошу подсказать редактор кода для XP
Прошу подсказать версию софта для установки в Windows XP 32 bits.

Прошу посмотреть 2 кода и подсказать, что использовалось
Проблема следующая. Есть два модуля. QBasic. Автоматическое создание выпусков новостей и выпусков...

Матлаб.С 3 по 10 задание.Прошу выполнить до Вторника,а то отчислят с универа.Прошу вас!
я Скинул 2 фотки.Там задания Правила: 4.3. Создавайте темы с осмысленными и понятными...

Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
Написать программу для работы по запросам оператора с приоритетной очередью запросов. Куча...

3
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,987
Записей в блоге: 43
08.04.2020, 17:30 2
Цитата Сообщение от zantal Посмотреть сообщение
Код не работает. Пишет "Cannot set property 'value' of null".
В первой итерации когда мы подходим к шестой строке у нас array.length еще не равен нулю поэтому срабатывает первая ветка, в ней переменной list присваивается значение list.rest, которое перед этим было инициировано как null, то есть ко второй итерации list имеет значение null. Ну и когда ты у него запрашиваешь свойство value, то получаешь то, что получаешь.
Цитата Сообщение от zantal Посмотреть сообщение
Но ведь null должен быть после значения 3 а на 1. Можете подробно описать как тут работает рекурсия?
Так null и становится туда в первой итерации именно когда значение равно 3. А на следующих итерациях свойству rest присваивается то, что было создано на предыдущих и это никак не null.
1
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
08.04.2020, 17:53 3
По первому вопросу идём по шагам:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
array = [1, 2, 3]; // Шаг 2: объявляем массив array
    function arrayToList_1(array) { // Шаг 1: объявляем функцию arrayToList_1()
      let list = {value: null, rest: null}; // Шаг 4: объявляем новый объект и записываем в переменную list ссылку на него
      while (array.length != 0) { // Шаг 5: запускаем цикл
        list["value"] = array.shift(); // Шаг 6: записываем в свойство value объекта list первый элемент массива array. В переменной list хранится ссылка на объект {value: 1, rest: null}
                                       // Шаг 9: пытаемся записать в свойство value объекта list значение 2. Но list после шага 8 уже не объект, а просто значение null. Отсюда и ошибка.
        if (array.length != 0) { // Шаг 7: проверяем условие
          list = list.rest; // Шаг 8: записываем в переменную list значение свойства rest объекта list. Переменная list после этого действия становится равна null
        } else {
          list.rest = null;
        }
      }
      return list;
    }
    console.log(arrayToList_1(array)); // Шаг 3: вызываем функцию arrayToList_1()
По второму вопросу:
В данном коде нет никакой рекурсии. Это обыкновенный цикл. На каждой итерации цикла создаётся новый объект {value: ..., rest: ...} и ссылка на него записывается в переменную list. Причём в свойство rest этого объекта помещается ссылка на предыдущий созданный объект. Таким образом этот объект и "разбухает". Цикл кстати идёт с конца исходного массива. Пройдите его по шагам и всё поймёте.
1
1 / 1 / 0
Регистрация: 08.04.2020
Сообщений: 18
11.04.2020, 10:38  [ТС] 4
Спасибо Вам большое, друзья!
0
11.04.2020, 10:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2020, 10:38
Помогаю со студенческими работами здесь

Составить блок-схемы к приведенным фрагментам кода
Помогите правильно составить блок-схемы для участков кода. 1) private void ForwardStroke(int...

Прошу подсказать
Добрый день Вкратец проблема: Я по образованию экономист. На работе по прихотям начальника издан...

прошу подсказать
Подскажите, пожалуйста, как реализовать сие на перле r = hex(w +...

Прошу подсказать
Учусь на заочном, было всего 2-е пары по этому языку программирования, вообще не въезжаю в него,...

Прошу подсказать
Вопрос в следующем. Итак имеем офис с 4 компьютерами и домашней сетью между ними. 2 стационарных...

Прошу подсказать с конфигурацией
Начитавшись в сети подобрал конфигурацию: Корпус AeroCool V3X Black Edition 1 370 р....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru