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