0

我有一个地址数组:

  1. 邮政编码城镇 Some Road 1 号房
  2. 邮政编码城镇 Some Road 2 室
  3. 公寓 3, Some Buidling, Some Road, Town, 邮编
  4. 邮政编码城镇 Some Road 4 号房

或者像这样:

  1. 公寓 1, 城镇, 邮政编码
  2. 公寓 2, 城镇, 邮政编码
  3. 公寓 3, 一些建筑, 城镇, 邮政编码
  4. 公寓 4, 城镇, 邮政编码

我不知道字符串的唯一或相同部分有多长。

我希望能够计算出地址的唯一部分并将其显示一次,而其他部分分别保留,因此它看起来像这样:

Some Road, Town, Postcode (或 Town, Postcode for the second example)

  1. 单位 1
  2. 单位 2
  3. 3号楼,一些建筑
  4. 4楼

我尝试使用一个对象,然后 _.pluck 和 _.uniq 来测试该项目是否是唯一的,但如果上面的项目 3 与其他项目不相符则失败。

4

1 回答 1

0

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

  1. 将每个数组元素转换为元素数组
  2. 为每个地址创建一个具有两个属性 {unique_address:"", changed_info:""} 的模型。unique_address 属性由数组的最后三个元素组成。

.

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"}];

有了这样的列表,您就有多种方法来获得您想要的东西。

我建议使用_.groupBy(list, iterator) underscore.js 中内置的内容,如下所示:

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

就这样。

有关使用 groupby 的更多信息,请参阅如何在 Backbone.js 中使用 groupBy 对集合进行分组?

于 2013-01-23T17:03:17.190 回答