Добавлять список в javascript разными способами - PullRequest
0 голосов
/ 03 июня 2018

Я добавляю новый элемент в список объектов, каждый объект содержит переменную value и переменную rest, значение которой равно следующему объекту.соответствующий код для преобразования массива в список:

function arrayToList (array) {
    var obj = {
        value: array[array.length-1],
        rest: null
    }
    var temp = obj;
    for (var i = 0; i < array.length-1; ++i) {
        var obj = {
            value: array[array.length-2-i],
            rest: temp
        }
        temp = obj;
    }

    return temp;
}

Моя проблема в следующем коде, функция prepend, мне нужно добавить элемент в начало списка.Я сделал это двумя способами: один с комментариями, который не удался, и другой способ создания объекта, который работает нормально.Я не знаю, что не так с комментируемым неудачным методом .

function prepend(objList, val) {
    // Failed method
    /*var newObj = objList;
    newObj.value = val;
    newObj.rest = objList;
    */        

    var newObj = {
        value: val,
        rest: objList
    };
    return newObj;
}

Большое спасибо!

1 Ответ

0 голосов
/ 03 июня 2018

Просто замените этот ошибочный код на этот, и он будет работать.Возможно, вы хотите, чтобы новый объект начинался с не live ссылки на старый.

var newObj = {};
newObj.value = val;
newObj.rest = objList;

function arrayToList (array) {
    var obj = {
        value: array[array.length-1],
        rest: null
    }
    var temp = obj;
    for (var i = 0; i < array.length-1; ++i) {
        var obj = {
            value: array[array.length-2-i],
            rest: temp
        }
        temp = obj;
    }

    return temp;
}

function prepend(objList, val) {
    // updated 
    var newObj = {};
    newObj.value = val;
    newObj.rest = objList;
    
    // var newObj = {
    //     value: val,
    //     rest: objList
    // };
    return newObj;
}

const arr = [1, 2, 3];
console.log(prepend(arrayToList(arr), 10));

Или вы можете скопировать objList методом prepend, используя Object.assign

var newObj = Object.assign({}, objList);
newObj.value = val;
newObj.rest = objList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...