如何在字符串数组中找到字符串的唯一部分?

时间:2013-01-23 11:19:47

标签: javascript underscore.js

我有一组地址:

  1. Flat 1,Some Road,Town,Postcode
  2. Flat 2,Some Road,Town,Postcode
  3. Flat 3,Some Buidling,Some Road,Town,Postcode
  4. Flat 4,Some Road,Town,Postcode
  5. 或者像这样:

    1. Flat 1,Town,Postcode
    2. Flat 2,Town,Postcode
    3. Flat 3,Some Buidling,Town,Postcode
    4. Flat 4,Town,Postcode
    5. 我不知道字符串的唯一或相同部分有多长。

      我希望能够找出地址的唯一部分,并将其显示一次,其他部分保持不变,这样看起来像这样:

      一些道路,城镇,邮政编码(或城镇,第二个例子的邮政编码)

      1. Flat 1
      2. Flat 2
      3. Flat 3,Some Buidling
      4. Flat 4
      5. 我尝试过使用一个对象,然后使用_.pluck和_.uniq测试该项是否唯一,但如果上面的项目3失败,则该项不符合其他项。

1 个答案:

答案 0 :(得分:0)

假设分隔符始终是逗号,这是一个可能的解决方案

  1. 将每个数组元素转换为元素数组
  2. 为每个地址创建一个具有两个属性{unique_address:“”,changing_info:“”}的模型。 unique_address属性由数组的最后三个元素组成。
  3. var modelList=[];
    
    _.each(addresses, function(element){
       var addrArr= addresses[element].split("");  //= ["Flat 1", "Some Road", "Town", "Postcode"];
       var len=addrArr.length;
       var uniq=addrArr[len-1]+" "+addrArr[len-2]+" "+addrArr[len-3]; //uniq= "Some Road Town Postcode"
       var chang="";
       for (var i=0;i<(len-3);i+){
             chang=chang+addrArr[i];
             } //which gives chang="Flat 1"
       modelList.push({unique_address:uniq, changing_info:chang});
       });
    

    现在你有这样的对象列表:

    modelList=[{unique_address: "Some Road Town Postcode", changing_info: "Flat 1"},
    {unique_address: "Some Road Town Postcode", changing_info: "Flat 2"},
    {unique_address: "Some Road Town Postcode", changing_info: "Flat 45"}];
    

    有了这样的列表,你有几种方法可以获得你想要的东西。

    我建议使用内置在underscore.js中的_.groupBy(list, iterator) 像这样:

    _.groupBy(modelList, function(element) {
        return element.unique_address;
    });
    

    就是这样。

    有关使用groupby的更多信息,请参阅How to use groupBy in Backbone.js to group collections?