Учитывая функцию, которая возвращает мне «[prop1] [prop2] [prop3]» для вложенного объекта javascript, как мне получить значение объекта [prop1] [prop2] [prop3]?

Я пишу функцию для преобразования массива в список с помощью Javascript.

Если входной массив выглядит следующим образом:

let inputArray = [1,2,3]

Выходной объект должен быть таким, как показано ниже:

let outputList = { 
    value: 1, 
    rest: {
        value: 2,
        rest: {
            value : 3,
            rest: null } } }

У меня есть функция ниже, которая принимает вложенный объект в качестве параметра и возвращает строку, которая представляет, где в объекте свойство имеет значение null:

function getLastValue(object) {
   let s = '';
   if (object.rest) {
     return s += '[rest]' + getLastValue(object.rest);
   } else {
     return s;
}

И функция ниже, которая преобразует массив в список:

var list = {value: '', rest: null};

function constructList(arr) {
    for (let prop of arr) {
        let lastValue = getLastValue(list);
        `${list}${lastValue}`.value = prop;
        `${list}${lastValue}`.rest = null;
    }
    return list;
}

Функция constructList не работает, поскольку ${list}${lastValue} является строкой. Мне нужно преобразовать приведенное выше из

'list[rest][rest]' 

к

list[rest][rest]

Любая помощь приветствуется!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
135
1

Ответы 1

Это было бы отличным местом для использования reduceRight - сначала создайте самый внутренний объект и пусть это будет новое значение аккумулятора, которое присваивается свойству rest следующего самого внутреннего объекта, и так далее:

const constructList = arr => arr.reduceRight(
  (rest, value) => ({ value, rest }),
  null
);
console.info(
  constructList([1, 2, 3])
);

Чтобы исправить исходный код, вместо того, чтобы создавать нить, который пытается ссылаться на вложенный объект, выполните итерацию по вложенной структуре, чтобы найти самое внутреннее свойство rest, и вернуть объект, который не содержит истинного свойства rest:

function getLastValue(obj) {
  while (true) {
    if (!obj.rest) return obj;
    obj = obj.rest;
  }
}

var list = {
  value: '',
  rest: null
};

function constructList(arr) {
  for (let prop of arr) {
    const nestedObj = getLastValue(list);
    nestedObj.value = prop;
    nestedObj.rest = {};
  }
  getLastValue(list).rest = null;
  return list;
}

console.info(
  constructList([1, 2, 3])
);

Другие вопросы по теме