在每个内部创建多维数组

时间:2016-01-24 22:11:58

标签: javascript

我想根据我在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"}]

3 个答案:

答案 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
    };
});

我想你已经可以看到优势了。