通过嵌套对象将数组转换为对象
为了让问题的背景再清晰一些,我已经尝试解这道练习题好几天,但还没有找到一个具体的解决方案。我自问的问题是:如何访问一个对象,以便再添加更多的嵌套对象,依此类推。
我想要得到的结果是:基于传给函数参数的那个数组,创建一个对象,该对象包含两个主要字段:value,即作为名称传入的值,在本例中是数字,且它们存在于数组中;以及rest,这是一个嵌套的对象,结构相同,直到作为函数参数传入的值用完为止。
console.log(arrayToList([10, 20]));
// → {value: 10, rest: {value: 20, rest: null}}
console.log(arrayToList([1,2,3,4,5]));
// → {value: 1, rest: {value: 2, rest: {value: 3, rest: {value: 4, rest: {value: 5, rest: null}}}}}
程序没有显示任何明显的错误,但我的代码显然没有实现我要的结果,只返回数组的第一个值,其余部分为空。
我的代码:
function arrayToList(...valoresList) {
debugger;
let list;
let listaAcceso;
for (let index = 0; index < valoresList.length; index++) {
if (index == 0) {
list = {value: valoresList[0], rest: {}};
continue;
};
for (let i = 0; i < index; i++) {
listaAcceso = list["rest"]
listaAcceso = {value: valoresList[index], rest: {}};
}
}
return list;
}
Value return: {value: 1, rest: {}}
解决方案
你可以采用递归的方法:返回一个值,或者最终只返回 null 的剩余部分。
function arrayToList(array) {
if (!array.length) return null;
return { value: array[0], rest: arrayToList(array.slice(1)) };
}
console.log(arrayToList([10, 20]));
console.log(arrayToList([1,2,3,4,5]));
通过使用迭代方法,你可以只取最外层的对象作为返回值,并用内部对象来为每个嵌套对象维持引用。
function arrayToList(array) {
const
object = {};
let reference = object;
for (const item of array) {
reference = reference.rest = {};
reference.value = item;
}
reference.rest = null;
return object.rest;
}
console.log(arrayToList([10, 20]));
console.log(arrayToList([1,2,3,4,5]));
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。