首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一个函数返回嵌套javascript对象的"[prop1][prop2][prop3]“,那么如何获得object[prop1][prop2][prop3]的值?

如果一个函数返回嵌套javascript对象的"[prop1][prop2][prop3]“,那么如何获得object[prop1][prop2][prop3]的值?
EN

Stack Overflow用户
提问于 2018-11-15 02:59:44
回答 1查看 224关注 0票数 0

我正在编写一个函数来使用Javascript将数组转换为列表。

如果输入数组如下所示:

代码语言:javascript
复制
let inputArray = [1,2,3]

输出对象应该如下所示:

代码语言:javascript
复制
let outputList = { 
    value: 1, 
    rest: {
        value: 2,
        rest: {
            value : 3,
            rest: null } } }

下面的函数接受嵌套对象作为其参数,并返回一个字符串,该字符串表示对象中的属性为null:

代码语言:javascript
复制
function getLastValue(object) {
   let s = '';
   if (object.rest) {
     return s += '[rest]' + getLastValue(object.rest);
   } else {
     return s;
}

下面的函数将数组转换为列表:

代码语言:javascript
复制
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}是一个字符串。我需要将以上内容转换为

代码语言:javascript
复制
'list[rest][rest]' 

代码语言:javascript
复制
list[rest][rest]

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2018-11-15 03:01:38

这将是使用reduceRight的一个很好的地方--首先构造最内部的对象,并让它成为累加器的新值,它被分配给下一个最内部的对象的rest属性,等等:

代码语言:javascript
复制
const constructList = arr => arr.reduceRight(
  (rest, value) => ({ value, rest }),
  null
);
console.log(
  constructList([1, 2, 3])
);

若要修复原始代码,而不是构造试图引用嵌套对象的字符串,请迭代嵌套结构以找到最内部的rest属性,并返回不包含真实rest属性的对象:

代码语言:javascript
复制
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])
);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53311788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档