在Javascript中从数组中删除类似的字符串

时间:2016-07-12 10:46:40

标签: javascript arrays string replace duplicates

我有一个类似字符串的数组,就像地标列表一样:

  

[“AB Street”,“A B Street”,“AB Street XE”,“AB Street X”,“AB   街(XE)“]

其中每一个都代表着一个标志性的“AB街”。

我尝试了不同的方法,找到了一种方法来删除多余的空格和特殊字符,但却无法弄清楚如何使用扩展名来缩短无关条目,无论如何都会导致相同的字符串。

用于删除空格和特殊字符的代码段:

var landmarks = ["AB Street", "A B Street", "AB Street XE", "AB Street X", "AB Street(XE)"];
var formattedLandmarks = [];

landmarks.sort();
landmarks.forEach(function(location) {
  var key = location && location.toLowerCase();
  key = key.replace(/[.\/-]*/g, "");
  key = key.replace(/\(.*\)/i, "");
  key = key.replace(/[0-9, _-]*$/, "");
  key = key.replace(/[ \t]+/g, " ");
  key = key.toString().trim();
  key = key.charAt(0).toUpperCase() + key.slice(1);

  formattedLandmarks.push(key);
});

console.log(formattedLandmarks);

我希望算法将输出作为数组返回,只有一个条目:

  

[“AB Street”]

如果有人可以通过RegExp或其他方式帮助获得最佳的方法和算法来实现预期的输出,那将是非常好的。

任何帮助都是值得的。

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

逻辑

  • 按升序排列数组
  • 将初始值设为空白
  • 循环并检查当前值是否有前一个。如果没有,那么将其推入阵列。

注意:您正在比较已分析的值,因此您应该仅根据这些已解析的值进行排序。

var array = ["AB Street", "A B Street", "AB Street XE", "AB Street X", "AB Street(XE)"];
var regex = /[^a-z]/gi;

var final = [];
array.sort(function(item1, item2){
  var _a = item1.replace(regex,"");
  var _b = item2.replace(regex,"");
  return _a > _b? 1: _a < _b ? -1: 0;
}).reduce(function(currentItem, nextItem) {
  var _p = currentItem.replace(regex, "");
  var _c = nextItem.replace(regex, "");
  if (_c.indexOf(_p)<0 || !currentItem) {
    final.push(nextItem);
  }
  return nextItem;
}, "")

console.log(final)

参考