2016-01-24 4 views
-1

Я хочу создать многомерный массив из значений, полученных мной по запросу ajax.Создание многомерного массива внутри каждого

ответ API-

[{"id":"35","name":"IAMA","code":"24"},{"id":"23","name":"IAMB","code":"08"}]

JQuery код

var mulArr = []; 
$.ajax({ 
    type: 'POST', 
    url: '/path/to/APIendpoint', 
    dataType: 'json', 
    data: { 
     codes: codes 
    }, 
    success: function(data) { 
     $.each(data, function(key, value) { 
      mulArr[key]['id'] = value.code; 
      mulArr[key]['text'] = value.name; 
     }); 
    } 
}); 

Синтаксис ошибки

TypeError: mulArr[key] is undefined

Я могу правильно извлечь data из конечной точки, единственной ошибкой, с которой я столкнулся, является то, о чем я говорил выше. В перспективе, все, что я хочу сделать, это просто многомерный массив/объект, как это:

mulArr[0]['id'] = '24'; 
mulArr[0]['text'] = 'IAMA'; 
mulArr[1]['id'] = '08'; 
mulArr[1]['text'] = 'IAMB'; 

или

[Object { id="24", text="IAMA"}, Object { id="08", text="IAMB"}]

+0

Что делает 'console.log (key)' show when put in '$ .each'? – Ian

+0

@Ian - Он выведет числовой индекс '0 1' –

ответ

2

Это происходит потому, что mulArr [0] не является объектом, и mulArr [ 0] ['id'] выдаст эту ошибку. Попробуйте следующее:

var mulArr = []; 
$.ajax({ 
    type: 'POST', 
    url: '/path/to/APIendpoint', 
    dataType: 'json', 
    data: { 
     codes: codes 
    }, 
    success: function(data) { 
     $.each(data, function(key, value) { 
      mulArr.push({id: parseInt(value.code), text: value.name}); 
      // or try this if select2 requires id to be continuous 
      // mulArr.push({id: key, text: value.name}); 
     }); 
    } 
}); 
+0

Спасибо за этот помощник, теперь ошибка теперь работает, как я могу сделать многомерный массив несколько похожим на это:' [Object {id = "24", text = «IAMA»}, Object {id = "08", text = "IAMB"}] '? –

+0

Что такое 'Object {id =" 24 ", text =" IAMA "}'? – Fabricator

+0

Это мой ожидаемый результат, с вашим кодом выше я построил массив, как превратить его в нечто подобное? –

1

Альтернатива использованию push (что является более понятным подходом) заключается в определении нового объекта.

mulArr[key] = { 
    id: value.code, 
    text:value.name 
}; 
1

Другой способ достижения того, что вы хотите, будет это одна:

var mulArr = []; 
$.ajax({ 
    type: 'POST', 
    url: '/path/to/APIendpoint', 
    dataType: 'json', 
    data: { 
     codes: codes 
    }, 
    success: function(data) { 
     mulArr = data.map(value => ({ id: parseInt(value.code), text: value.name })); 
    } 
}); 

Это чище, а также использует встроенную карту вместо JQuery $ .each. Таким образом, вы также узнаете о преимуществах использования функции карты (которая возвращает новый массив), а также узнайте полезные функции ES2015.

Если вы не можете использовать ES6 (ES2015) вот другая версия:

mulArr = data.map(function (value) { 
    return { 
     id: parseInt(value.code), 
     text: value.name 
    }; 
}); 

Я думаю, вы уже можете увидеть преимущества.

+0

Спасибо за этот друг, теперь ошибка теперь работает, как я могу сделать многомерный массив примерно следующим: '[Object {id =" 24 ", text =" IAMA "}, Объект {id = "08", text = "IAMB"}] '? –

+0

Обновлен мой ответ –

+0

@LeandroGarcia, пожалуйста, зарегистрируйте ответ с сервера (данные в обратном вызове), а затем зарегистрируйте mulArr после его назначения. Может быть, это поможет вам понять, в чем проблема –

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