Почему мой параметр массива не в запросе POST?

На ваш второй вопрос был дан ответ, но что касается вашего первого:

, что точно фиксирует захват?

blockquote>

Scoping in Python является динамическим и лексический. Закрытие всегда будет помнить имя и область действия переменной, а не объект, на который она указывает. Поскольку все функции в вашем примере создаются в одной области и используют одно и то же имя переменной, они всегда ссылаются на одну и ту же переменную.

EDIT: Что касается вашего другого вопроса о том, как преодолеть это, способы, которые приходят на ум:

  1. Наиболее кратким, но не строго эквивалентным способом является , рекомендованный Адриеном Плиссоном . Создайте лямбда с дополнительным аргументом и установите значение по умолчанию для дополнительного аргумента для объекта, который вы хотите сохранить.
  2. Немного более подробный, но менее хакерский - это создать новую область при каждом создании лямбда:
    >>> adders = [0,1,2,3]
    >>> for i in [0,1,2,3]:
    ...     adders[i] = (lambda b: lambda a: b + a)(i)
    ...     
    >>> adders[1](3)
    4
    >>> adders[2](3)
    5
    
    Область здесь создается с использованием новой функции (лямбда, для краткости), которая связывает ее аргумент и передает значение, которое вы хотите связать в качестве аргумента. Однако в реальном коде вы, скорее всего, будете иметь обычную функцию вместо лямбда для создания новой области:
    def createAdder(x):
        return lambda y: y + x
    adders = [createAdder(i) for i in range(4)]
    

0
задан apokryfos 22 March 2019 в 07:55
поделиться

1 ответ

JavaScript, в отличие от PHP, имеет очень строгое поведение для массивов, так как они всегда численно индексируются.

В вашем коде у вас есть:

let todoItem = []
todoItem['modified'] = $("#modified_" + i).val();

Это недопустимо, потому что у вас есть массив, но вы пытаетесь использовать его как объект. Это просто создаст пользовательские свойства объекта массива, но на самом деле ничего не добавит к базовому массиву. Это должно быть видно в консоли, где ваш todosList массив представляет собой массив из 3 массивов длины 0.

Вы можете заставить это работать, сделав:

let todosList = [];
for (let i = 0; i < todos_count; i++) {
    let todoItem = {
        modified: $("#modified_" + i).val(),
        todo_text: $("#todo_text_" + i).val(),
        todo_priority: $("#todo_priority_" + i).val(),
        todo_completed: $("#todo_completed_" + i).val()
    }; //Object initialiser
    todosList.push(todoItem);
}

Остальная часть кода должна работать как есть

0
ответ дан apokryfos 22 March 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: