[英]How to most efficiently generate string from array of objects in javascript?
我有以下内容:
var students = [{name:"Jordan", age:"6"},{name:"Jake", age:"7"},{name:"Mark", age:"10"}]
我想生成一个这样的字符串:“Jordan,6 | Jake,7 | Mark,10”
最有效的方法是什么?
我目前正在使用:
var studentstr = "";
for(var i = 0; i < students.length; i++) {
studentstr = students['name'] + "," + students['age'] + "|"
}
studentstr = studentstr.substring(0, studentstr.length - 1);
另外,性能方面,如果我有2000个项目的数组,那么执行这种转换是“代价高昂”吗? 结果字符串包含对象中的两个键,而不包含属性中一个对象上的单个连接。
您可以将每个学生对象映射到一个字符串,然后使用|
将它们全部连接起来 :
var studentstr = students.map(function (student) {
return student.name + ',' + student.age;
}).join('|');
另外,性能方面,如果我有2000个项目的数组,那么执行这种转换是“代价高昂”吗?
没有。
是的,在循环中使用字符串连接是昂贵的。 每次迭代时字符串都会增长,每次必须复制整个前一个字符串以创建新版本。 循环的执行时间呈指数增长到项目数。
您可以将每个对象的字符串放在一个数组中,然后将它们连接在一起:
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);
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('|'));
试试这个,看看你的控制台:
var string = '';
for (var s in students) {
string += students[s].name + ', ' + students[s].age + ' | ';
}
console.log(string);
小提琴: http : //jsfiddle.net/80ss0u14/
我认为采用这种方法并不昂贵。 它可能是迭代数据的最有效方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.