给定一个函数,该函数返回嵌套JavaScript对象的“ [prop1] [prop2] [prop3]”,如何获取object [prop1] [prop2] [prop3]的值?

时间:2018-11-15 02:59:45

标签: javascript

我正在编写使用Javascript将数组转换为List的函数。

如果输入数组如下:

<app-image-uploader (uploadStatusChange)="yourFunction($event)"></app-image-uploader>

输出对象应如下所示:

let inputArray = [1,2,3]

我具有以下函数,该函数接受嵌套对象作为其参数,并返回一个字符串,该字符串表示该对象在其中的位置为null:

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

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

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

constructList 函数无法工作,因为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; } 是一个字符串。我需要从

转换以上内容
${list}${lastValue}

'list[rest][rest]' 

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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

要修复您的原始代码,而不是构造试图引用嵌套对象的 string ,请遍历嵌套结构以查找最里面的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.log(
  constructList([1, 2, 3])
);