在JSON Array上设置结果值

时间:2016-06-26 07:29:58

标签: javascript jquery

所以我有一个var data,其结果数组JSON值如下:

[
   {"vehicle_id":"1", "model_name":"sedan"},
   {"vehicle_id":"2", "model_name":"elf"},
   {"vehicle_id":"3", "model_name":"truck"}
]

我想在新变量上设置每个值,如下所示:

var newdata = [
    {
        text: Obj.model_name
        value: Obj.vehicle_id
    },
    {
        text: Obj.model_name
        value: Obj.vehicle_id
    },
    ......
];

如何设置上面变量的每个值?

我已经尝试过这种方法:

var newdata = [
    $.each(data, function(index, Obj){
       {
           text: Obj.model_name
           value: Obj.vehicle_id
       }
    })
];

但似乎它不起作用,任何人都可以有这种情况的最佳实践吗?

3 个答案:

答案 0 :(得分:5)

使用.map

var newData = data.map(function(obj) {
  return {
    text: obj.model_name,
    value: obj.vehicle_id,
  };
});

您的代码存在的问题是它没有做任何事情。虽然$.each将迭代数组,但您的函数不会改变元素。它甚至不创建新对象,您只需创建一个block,其中包含两个labels。您可以将其视为等同于

for (var i = 0; i < arr.length; i++) {
  arr[i].model_name;
  arr[i].vehicle_id;
}

即。您只是引用属性,但没有对这些值做任何事情。

答案 1 :(得分:3)

只需使用map()

var newData = data.map(function(item) {
    return {
         text: item.model_name,
         value: item.vehicle_id
    };
});

请参阅MDN

答案 2 :(得分:0)

使用'map'而不是'each'。 或者像这样使用'$ .each':

var newdata = [];
$.each(data, function(index, Obj){
   newdata.push({
       text: Obj.model_name,
       value: Obj.vehicle_id
   })
});