在数组中查找多个字符串实例&重新排序

时间:2016-10-21 18:51:36

标签: javascript arrays sorting

我的问题如下:我正在尝试将数据格式化为下面代码段中的'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);

2 个答案:

答案 0 :(得分:2)

你很接近,但这个解决方案对你有用。基本上你需要在循环中更新并增加索引i以考虑交换机。否则,您将最终重新访问您切换的姓氏。

&#13;
&#13;
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;
&#13;
&#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);