2017-05-03 1 views
0

私はいくつかの条件に従って既存のオブジェクトから新しいオブジェクトの配列を抽出する方法を見つけようとしています。要素がすでに存在する場合は、新しい配列をコピーしません。フィルタリング与えられた値でオブジェクトの配列を作成し、同じ値に従って複製を追加しないようにする

だから、これは私が持っているオブジェクトです。addressesObj

今、私は、例えば特定の郵便番号でオブジェクトをフィルタ処理したいと思います:

` 
var PostCode = "TN37 7AJ " 
var newAddressesObj = addressesObj.filter(function (duties) { 
     return duties.Address.Postcode === PostCode 
    }); 
` 

これが正しく動作する、それが持つ配列を私に戻っています2つのオブジェクト:今

newAddressesObj

私は同じPでレコードを削除したいと思い、この新しい配列からostcodeので、私は1つだけのオブジェクトを返す - それはどうすればいいですか?

私はフィルタと一緒に$ .inArrayを使用して試してみましたが、私は何か間違ったことをやって、私はまた、一度にすべてのことをしたいと思っ - このような何か:

var PostCode = "TN37 7AJ " var newAddressesObj = addressesObj.filter(function (duties) { return duties.Address.Postcode === PostCode && $.inArray(PostCode, addressesObj == -1 });

任意のアイデア?

おかげ

+0

使用(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find?v=control)[検索]。 'find'は最初のマッチの後に停止します。 – Titus

+0

ああ、私はそれを得る。特定の郵便番号を持つすべての個別のオブジェクトを抽出したいとします。 – Titus

+0

私は私の質問に何か言及するのを忘れました...実際には、私は2要素ではなく1を抽出したいオブジェクトから。 これは実際の実装です。 var StartPCode = "TN37 7AJ"、EndPCode = "TN38 8EW" var newAddressesObj = addressesObj.filter(function(x){ return(x.Address.StartPCode === StartPCode || x .Address.EndtPcode === EndPCode)&& $ .inArray(PCode、addressesObj == -1}); 最後にdiffの郵便番号を持つ2要素のオブジェクトがありますので、Google MapsとShowに渡すことができますルートは基本的に... あなたのクイックリプレイのためにとにかくありがとうtho – Daniele

答えて

0

は、アレイ内に濾過郵便番号を追加し、各要素の郵便番号の配列がループチェックを続けます。代わりfilter` `の

var PostCode = "TN37 7AJ"; 
var addressesObj = [{ 
     "Address": { 
      "Postcode": "TN38 8EW", 
      "AddressLine1": "32 Head View" 
     }, 
     "Name": "Ball, Jones", 
     "ServiceDutyId": 0 
    }, 
    { 
     "Address": { 
      "Postcode": "TN37 7AJ", 
      "AddressLine1": "171 Road" 
     }, 
     "Name": "Trump, Albert", 
     "ServiceDutyId": 3259 
    }, 
    { 
     "Address": { 
      "Postcode": "BN1 5AA", 
      "AddressLine1": "171 Road" 
     }, 
     "Name": "Martin, Lucas", 
     "ServiceDutyId": 4256 
    }, 
    { 
     "Address": { 
      "Postcode": "TN37 7AJ", 
      "AddressLine1": "171 Road" 
     }, 
     "Name": "Trump Albert", 
     "ServiceDutyId": 3273 
    } 
] 

var postcodeArr = []; 

var isAbsence = function(postcode) { 
    if (postcodeArr.indexOf(postcode) == -1) { 
     postcodeArr.push(postcode); 
     return true; 
    } 

    return false; 
} 

var newAddressesObj = addressesObj.filter(function(duties) { 
    return duties.Address.Postcode === PostCode && isAbsence(duties.Address.Postcode); 
}); 
関連する問題