0

我收到来自 json 的以下格式的响应

["user0", "user1", "user2", "user3", "user5", "user6", "user7"]

我需要将其转换为以下格式

    [
     { id: 'user0', text: 'user1'},
     { id: 'user1', text: 'user2'},
     { id: 'user2', text: 'user3'},
     { id: 'user3', text: 'user4'},
     { id: 'user5', text: 'user5'},
     { id: 'user6', text: 'user6' },
     { id: 'user7', text: 'user7' }
    ];

如何在 javascript 中实现这一点。

4

4 回答 4

0

尝试这个

    var a = ["user0", "user1", "user2", "user3", "user5", "user6", "user7"]
    var array = [];

    for(var i =0;i<a.length;i++)
    {
        var temp = new Object();
        temp.id= a[i];
        temp.text = a[i];
        array.push(temp);
        //alert(JSON.stringify(array));
    }

var requiredString = JSON.stringify(array);
alert(requiredString.replace(/"id"/g, 'id').replace(/"text"/g,text));
于 2013-04-12T10:38:04.177 回答
0

在现代浏览器中,我会使用map

var array = ["user0", "user1", "user2", "user3", "user5", "user6", "user7"];

var newArray = array.map(function(item) {
    return {id: item, text: item};
})

如果你必须支持不支持 ES5 的旧浏览器,我会使用 shim——通常我会填充所有ES5 方法,但你也可以只实现你需要的那个,实现示例在文档中。

只是要知道,在 ES6 和 Firefox Nightly 已经支持新的 fat 数组语法 - 你实际上可以有:

var array = ["user0", "user1", "user2", "user3", "user5", "user6", "user7"];

var newArray = array.map(item => ({id: item, text: item}));
于 2013-04-12T10:34:28.713 回答
0

一个简单的循环应该可以满足您的需要:

var myArray = ["user0", "user1", "user2", "user3", "user5", "user6", "user7"];
var newArray = [];
for (var i = 0, l = myArray.length; i < l; i++) {
    var newItem = {id : myArray[i], text: "user" + (i +1)};
    newArray.push(newItem);
}

JSFiddle 示例 - http://jsfiddle.net/eVQWS/

于 2013-04-12T10:23:54.690 回答
0

最简单的方法是使用map方法:

var arr = ["user0", "user1", "user2", "user3", "user5", "user6", "user7"],
    result = arr.map(function(e, i, a) {
        return { id: e, text: i < a.length - 1 ? a[i+1] : e };
    });

console.log(result);

请在MDN上检查浏览器兼容性,并在需要时使用shim 。

于 2013-04-12T10:24:08.023 回答