javascript - 给定一个为嵌套 javascript 对象返回 "[prop1][prop2][prop3]"的函数,如何获取 object[prop1][prop2][prop3] 的值?

标签 javascript

我正在编写一个函数,使用 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]

感谢任何帮助!

最佳答案

这将是使用reduceRight的好地方 - 首先构造最里面的对象,并将其作为累加器的新值,该值被分配给下一个最里面的对象的rest 属性等:

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

要修复原始代码,不要构建尝试引用嵌套对象的字符串,而是迭代嵌套结构以查找最里面的rest 属性,并返回不包含 true 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.log(
  constructList([1, 2, 3])
);

关于javascript - 给定一个为嵌套 javascript 对象返回 "[prop1][prop2][prop3]"的函数,如何获取 object[prop1][prop2][prop3] 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53311788/

相关文章:

javascript - 使用 ng-repeat 创建 DOM 属性

javascript - 切换类只知道第一个选定的标签

javascript - 如何将 RESTful API 连接到 Dreamweaver 中的移动应用程序?

javascript - 我正在尝试将变量的值存储在 window.onload 上以供以后使用

php - javascript在刷新页面后保持复选框选中状态

PHP 脚本 : malicious JavaScript code at the end

javascript - 使用 Javascript 下载图像

javascript - IE 10 缓存问题?

javascript - 如何使用javascript打印灯箱

javascript - 动态传递键以映射到新对象