0

私はアドレスの配列を持っています:

  1. フラット 1、一部の道路、町、郵便番号
  2. フラット 2、一部の道路、町、郵便番号
  3. フラット 3、一部の建物、一部の道路、町、郵便番号
  4. フラット 4、一部の道路、町、郵便番号

またはこのように:

  1. フラット 1、町、郵便番号
  2. フラット 2、町、郵便番号
  3. フラット 3、いくつかの建物、町、郵便番号
  4. フラット 4、タウン、郵便番号

文字列の一意の部分または同じ部分の長さがわかりません。

住所の一意の部分を計算し、他の部分を個別に残して一度表示できるようにしたいので、次のようになります。

いくつかの道路、町、郵便番号 (または 2 番目の例の町、郵便番号)

  1. フラット 1
  2. フラット 2
  3. フラット 3、ビルの一部
  4. フラット 4

オブジェクトを使用してから、_.pluck と _.uniq を使用して、そのアイテムが一意であるかどうかをテストしましたが、他のアイテムと一致しない上記のアイテム 3 で失敗した場合。

4

1 に答える 1

0

セパレーターが常にコンマであると仮定すると、可能な解決策は次のとおりです

  1. 各配列要素を要素の配列に変換します
  2. 住所ごとに、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"}];

このようなリストがあれば、欲しいものを手に入れる方法がいくつかあります。

_.groupBy(list, iterator) underscore.js に組み込まれているものを使用することをお勧めします。

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

それで全部です。

groupby の使用の詳細については、Backbone.js で groupBy を使用してコレクションをグループ化する方法を参照してください。

于 2013-01-23T17:03:17.190 に答える