如何在javascript中最有效地从对象数组生成字符串?

时间:2015-09-02 15:52:21

标签: javascript

我有以下内容:

var students = [{name:"Jordan", age:"6"},{name:"Jake", age:"7"},{name:"Mark", age:"10"}]

我想生成一个这样的字符串: “约旦,6 |杰克,7 |标记,10”

最有效的方法是什么?

我目前正在使用:

var studentstr = "";
for(var i = 0; i < students.length; i++) {
  studentstr = students['name'] + "," + students['age'] + "|"
}
studentstr = studentstr.substring(0, studentstr.length - 1);

另外,在性能方面,如果我有一个2,000个项目的数组,那么执行这种转换是“代价高昂”吗?结果字符串包含对象中的两个键,而不包含属性中一个对象上的单个连接。

4 个答案:

答案 0 :(得分:2)

您可以将每个学生对象映射到一个字符串,然后将它们全部加入|

var studentstr = students.map(function (student) {
    return student.name + ',' + student.age;
}).join('|');
  

另外,在性能方面,如果我有一个2,000个项目的数组,那么执行这种转换是“代价高昂”吗?

没有

答案 1 :(得分:1)

是的,在循环中使用字符串连接成本很高。每次迭代时字符串都会增长,每次必须复制整个前一个字符串以创建新版本。循环的执行时间呈指数增长到项目数。

您可以将每个对象的字符串放在一个数组中,然后将它们连接在一起:

var students = [{name:"Jordan", age:"6"},{name:"Jake", age:"7"},{name:"Mark", age:"10"}];

var items = [];
for (var i = 0; i < students.length; i++) {
  items.push(students[i].name + ',' +students[i].age);
}
var str = items.join('|');

// display result in snippet
document.write(str);

答案 2 :(得分:1)

map适用于此:

var students = [{name:"Jordan", age:"6"},{name:"Jake", age:"7"},{name:"Mark", age:"10"}];
var result = students.map(function(student) {
    return student.name + ',' + student.age;
});
alert(result.join('|'));

答案 3 :(得分:-1)

试试这个,看看你的控制台:

var string = '';
for (var s in students) {
    string += students[s].name + ', ' + students[s].age + ' | ';
}

console.log(string);

小提琴:http://jsfiddle.net/80ss0u14/

我认为采用这种方法并不昂贵。它可能是迭代数据的最有效方式。