我的问题如下:我正在尝试将数据格式化为下面代码段中的'names'变量,将字符串转换为数组,然后重新组织数组,使文本的顺序正确。我能够得到我已经放在一起的部分,以正确地排序第一个和第一个的第一个或最后一个实例。姓氏,但我正在寻求如何处理多个名称的指导。下面的代码段将返回第一个&的最后一个实例。姓氏正确的顺序。此时,我只希望将数据作为正确排序的数组返回,例如
如果输入字符串是
names = "Bond, James & Banner, Bruce";
处理后应返回:['James', 'Bond,', '&', 'Bruce', 'Banner,']
我一如既往地感谢所有的帮助,提前谢谢!
Array.prototype.move = function(from,to){
this.splice(to,0,this.splice(from,1)[0]);
return this;
};
var names ="Bond, James & Banner, Bruce";
var namesArr = names.split(' ');
var idx;
// search for a comma (only last names have commas with them)
for(var i = 0; i < namesArr.length; i++) {
if(namesArr[i].indexOf(',') != -1) {
idx = i;
}
}
namesArr.move(idx, idx+1);
console.log(namesArr);
答案 0 :(得分:2)
你很接近,但这个解决方案对你有用。基本上你需要在循环中更新并增加索引i以考虑交换机。否则,您将最终重新访问您切换的姓氏。
Array.prototype.move = function(from,to){
this.splice(to,0,this.splice(from,1)[0]);
return this;
};
var names ="Bond, James & Banner, Bruce & Guy, Other";
var namesArr = names.split(' ');
var idx;
// search for a comma (only last names have commas with them)
for(var i = 0; i < namesArr.length; i++) {
if(namesArr[i].indexOf(',') != -1) {
namesArr.move(i, i+1);
i++;
}
}
console.log(namesArr);
&#13;
答案 1 :(得分:1)
另一个 解决方案可以使用String.prototype.match()和正则表达式\w+
来匹配名称:
var names = "Bond, James & Banner, Bruce & Licoln, Anna"; // ...
var arr_names = names.match(/\w+/g); // Match names
var res = [];
for (var i = 0; i < arr_names.length; i += 2) { // Step by 2
res.push(arr_names[i + 1]); // Push the name before
res.push(arr_names[i]); // Push the current name
res.push("&"); // Add "&"
}
res.splice((res.length - 1), 1); // Remove last "&"
console.log(res);