我想根据我在ajax post请求中检索到的值创建一个多维数组。
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 :(得分: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});
});
}
});
答案 1 :(得分:1)
使用push(更简洁的方法)的替代方法是定义新对象。
mulArr[key] = {
id: value.code,
text:value.name
};
答案 2 :(得分: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。通过这种方式,您还可以了解使用map函数(返回新数组)的好处,并了解ES2015的有用功能。
如果你不能使用ES6(ES2015),这里是另一个版本:
mulArr = data.map(function (value) {
return {
id: parseInt(value.code),
text: value.name
};
});
我想你已经可以看到优势了。