Похоже, что index
объявляется глобальной переменной и получает мутацию при каждом вызове buildList. Я думаю, что это ваша проблема (но, возможно, вы делаете это специально для чего-то, чего я не вижу). Попробуйте изменить свой оператор for:
for(var index=0; index < lis.length; index++){
// ...
}
Да.
var data = {'PropertyA': 1, 'PropertyB': 2, 'PropertyC': 3}; данные ["PropertyD"] = 4; // диалоговое окно с 4 в нем alert (data.PropertyD); alert (data ["PropertyD"]);
Вы можете добавить столько свойств, сколько захотите, просто используя точечную нотацию:
var data = {
var1:'somevalue'
}
data.newAttribute = 'newvalue'
или :
data[newattribute] = somevalue
для динамических ключей.
Да, это возможно. Предположим:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
var propertyName = "someProperty";
var propertyValue = "someValue";
Либо:
data[propertyName] = propertyValue;
, либо
eval("data." + propertyName + " = '" + propertyValue + "'");
Первый метод предпочтительнее. eval () имеет очевидные проблемы безопасности, если вы используете значения, предоставленные пользователем, поэтому не используйте его, если вы можете этого избежать, но стоит знать, что он существует и что он может делать.
Вы можете ссылаться на это с помощью:
alert(data.someProperty);
или
data(data["someProperty"]);
или
alert(data[propertyName]);
Здесь, используя ваши обозначения:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to
//my object?
data[propName] = 'Some New Property value'
Определенно. Думайте об этом как о словаре или ассоциативном массиве. Вы можете добавить к нему в любой момент.