我正在编写一个函数来使用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]任何帮助都是非常感谢的!
发布于 2018-11-15 03:01:38
这将是使用reduceRight的一个很好的地方--首先构造最内部的对象,并让它成为累加器的新值,它被分配给下一个最内部的对象的rest属性,等等:
const constructList = arr => arr.reduceRight(
(rest, value) => ({ value, rest }),
null
);
console.log(
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.log(
constructList([1, 2, 3])
);
https://stackoverflow.com/questions/53311788
复制相似问题