0

JSON オブジェクトとして格納されているローカル ストレージにアドレスのリストがあります。

{"Addresses"[
  {"address1":"1111 W Main"},
  {"address2":"2222 W Main"},
  {"address3":"1111 W Main"},
  {"adess4":"3333  Main"}
]};   

それらを並べ替えて、重複を削除する必要があります。

配列でこれを行うことができます

var addressList = ['2111 W State', '2111 W State', '1111 W State', '3111 W State'];
var sortedAddressList = addressList.sort();
var results = [];
for (var i = 0; i < addressList.length; i++) {
  if (sortedAddressList[i + 1] != sortedAddressList[i]) {
    results.push(sortedAddressList[i]);
  }
}
alert(results);

オブジェクトを文字列に変換せずに同じ結果を得るにはどうすればよいですか??

4

5 に答える 5

1

まず、オブジェクト プロパティの命名はあまり賢明ではありません。アクセス キーは、インデックスの知識に依存するのではなく、予測可能である必要があります。

{"Addresses": [
  {"address":"1111 W Main"},
  {"address":"2222 W Main"},
  {"address":"1111 W Main"},
  {"address":"3333  Main"}
]}; 

"address"したがって、この時点で、以前に使用していた手法を使用できますが、プロパティにアクセスする必要があるだけです。

var sortedAddressList = data.Addresses.sort(function(a, b) {
    return a.address.localeCompare(b.address);
});
var results = [];
for (var i = 0; i < sortedAddressList.length; i++) {
  if (sortedAddressList[i + 1].address != sortedAddressList[i].address) {
    results.push(sortedAddressList[i]);
  }
}
alert(results);

または、もう少しモダンにすることもできます。

var results = data.Addresses.sort(function(a, b) {
    return a.address.localeCompare(b.address);
}).filter(function(item, i, arr) {
    return arr[i + 1].address != item.address;
});

alert(results);
于 2012-10-05T20:28:23.787 に答える
0

このように、一意の値を読み取って配列に入れることができます

var data = {
    "Addresses": [{
        "address1": "2222 W Main"},
    {
        "address2": "1111 W Main"},
    {
        "address3": "1111 W Main"},
    {
        "adess4": "3333  Main"}]
};

var arr = [];

var address = ['address1', 'address2', 'address3', 'adess4'];

$.each(data.Addresses, function(i, value) {
    var val = value[address[i]];
    if (arr.indexOf(val) == -1) {
        arr.push(val);
    }
});

console.log(arr);

arr.sort();

フィドルをチェック

于 2012-10-05T20:23:09.160 に答える
0

手始めに、すべてのキーを「アドレス」にします。

{"Addresses"[{"address":"1111 W Main"},{"address":"2222 W Main"},{"address":"1111 W Main"},{"adess":"3333 Main]};

その後、その特定のキーの JSON オブジェクトをループして、それらの値を配列に格納できます。最後に、上記の並べ替え/重複削除メソッドを使用できます。

var addressList = {"Addresses":[{"address":"1111 W Main"},{"address":"2222 W Main"},{"address":"1111 W Main"},{"address":"3333  Main"}]}; 

var arr = new Array();
for(var i =0; i < addressList.Addresses.length; i++){
 arr.push(addressList.Addresses[i].address);
}

var sortedAddressList = arr.sort();
var results = [];

 for (var i = 0; i < sortedAddressList.length; i++) {
   if (sortedAddressList[i + 1] != sortedAddressList[i]) {
       results.push(sortedAddressList[i]);
   }
 }

alert(results);​

于 2012-10-05T20:25:09.223 に答える
0

このようなものをお探しですか?

var uniqueSortedAddresses = [];
({"Addresses":[
  {"address1":"1111 W Main"},
  {"address2":"2222 W Main"},
  {"address3":"1111 W Main"},
  {"address4":"3333  Main"}
]}).Addresses.forEach(function(addressObj) {
  var i,address;
  for(i in addressObj) {
    if(addressObj.hasOwnProperty(i)) {
      address = addressObj[i];
      if(uniqueSortedAddresses.indexOf(address)==-1){
        uniqueSortedAddresses.push(address);
      }
    }
  }
});
uniqueSortedAddresses.sort();
于 2012-10-05T20:39:05.847 に答える
-1

Jackson Object マッパーを使用すると、任意のタイプの入力ストリームまたは byte[] を含む Address 配列リストを簡単に取得できると思います。

それを java.util.SortedSet に入れるだけで、すべてが完了します。

于 2012-10-05T20:14:05.740 に答える