通过嵌套对象将数组转换为对象

前端开发 2026-07-11

为了让问题的背景再清晰一些,我已经尝试解这道练习题好几天,但还没有找到一个具体的解决方案。我自问的问题是:如何访问一个对象,以便再添加更多的嵌套对象,依此类推。

我想要得到的结果是:基于传给函数参数的那个数组,创建一个对象,该对象包含两个主要字段: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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章