2015-01-13 3 views
0

Это, вероятно, очевидно, но почему я не получаю ожидаемую строку JSON при добавлении пары ключ-значение в этот массив javascript?javascript-массив-ассоциированный массив добавить пара значений ключа неожиданный результат

Следующий шаг: Как показывает код, я действительно хочу иметь два набора данных в объекте.

jsFiddle here - Weird, at moment only "works" in Chrome

var myKey = "123", myVal="Car"; 
var arrSummat = new Array(); 

$('#mybutt').click(function(){ 
    arrSummat["987"] = "Boat"; 
    //arrSummat[myKey] = myVal; 
    var test = JSON.stringify(arrSummat); 
    alert(test); 
}); 
+5

Шаг один: 'Array' следует использовать только в виде массива. Не объект или «ассоциативный массив». Если вы хотите, чтобы ассоциативный массив использовал объект: 'arrSummat = {}; arrSummat ["987"] = "Лодка"; ' –

+0

Вот ваш образец в качестве объекта: http://jsfiddle.net/s7tdq469/1/ –

+3

Aaaargh. Вы знаете, сколько блогов/тутов/страниц, которые я посетил, обсуждали эту проблему, и все, что я нашел, было то, что массивы-получатели в js действительно являются объектами, а затем они определяли их, как я делал выше. Искреннее спасибо за решение. Пожалуйста, добавьте в качестве ответа для принятия. – crashwap

ответ

5

В JavaScript строит ассоциативный массив * или хэш-карта или объект не может быть очень очевидна. Во-первых, все в конечном счете является объектом, поэтому синтаксис, используемый с ассоциативными массивами, действителен для всего, что не является «ассоциированным массивом», который, вероятно, является причиной возникновения путаницы. Сначала давайте рассмотрим проблему. Вы, вероятно, хотели использовать объект вместо массива:

arrSummat = {}; 
arrSummat["987"] = "Boat"; 
console.log(JSON.stringify(arrSummat)); // => {"987":"Boat"} 

При запуске вашей скрипки (в Chrome) Я довольно много получить массив с 986 null значений, а затем "Boat" (я могу ошибаться, я» m не считая счет null s в этом предупреждении).

Теперь, когда вы оригинальный вопрос будет решен, я хотел бы отметить две вещи, которые вы можете начать делать по-разному:

Предпочитаю сокращенный синтаксис для OBJETS и массивов. Два примера функционально одинаковы, но вы должны предпочесть второй для большинства целей.

var myArr = new Array(); 
var myObj = new Object(); 

То же самое, как:

var myArr = []; 
var myObj = {}; 

сокращенную может даже прийти с некоторыми основными значениями:

var myArr = [1, 2, 3]; 
var myObj = {one: "1", two: "2"}; 

Во-вторых, никогда не используйте Array объект как нечто иное, чем массив. Это синтаксически справедливо для этого, но это приведет к неожиданным результатам (как вы видели здесь).

  • В JavaScript нет «ассоциативного массива», но объекты обычно используются в качестве замены и обеспечивают аналогичную функциональность.

Revised jsFiddle Link

+0

Фантастический ответ и стоит больше очков, чем полученных. Thx тоже для подключения числа «null» с предоставленным значением - я этого не заметил. Хотел бы я снова подняться. – crashwap

+0

@crashwap Спасибо за ваши добрые слова, я просто рад, что вы смогли пройти мимо своей проблемы и двигаться вперед! –

Смежные вопросы