我正在编写使用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]'
感谢您的帮助!
答案 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])
);