2016-12-06 3 views
0

私は現在、営業担当チーム用の簡単な販売管理ツールを構築しています。私は非常にプログラミングの新人ですが、基本的な概念やその他のものを理解するためにJavaScriptで十分な知識を持っています。オブジェクト内の特定のキーと値のペアを比較する - 直接一致なし(JavaScript)

アプリの主な機能は、価格、色、メーカー、機会の種類、条件などをフォームを通じてパンチングしています。現在達成しようとしているのは、配列内に入れ子になっているオブジェクト内のキーと値のペアを比較することです。最終的に機会のタイプを比較しようとしています(たとえば、特定の価格で電話を払うことを望むバイヤー)と一致しますで電話を売りたい売り手買い手が100ドルを払って売り手が100ドルで売りたい場合、価格は一致します私は探していません直接一致しますが、MEANスタック内のモデルで定義したいくつかの条件に単純にマッチさせてください。

ここで私はバックエンドからフロントエンドへの簡単なAPIコールを通して作成したJSONオブジェクトのスニペットです。 〜についてオブジェクトと配列を比較する方法と同様にタックオーバーフローやGoogleのようなものがありますが、それらのほとんどは2つの配列、2つのオブジェクトなどの間で直接一致するレンダリング方法を示しています。キーの値のペア私のオブジェクト内。

私はこれが長い質問であることを知っています。必要であれば、もっと明確に説明することができます。私はかなり絶望的で、このために私の頭脳を考えていました。どんな助けも素晴らしいだろう、ありがとう!

[ 
{ 
"_id": "583e77e4be1fb20bce420ca1", 
"created_at": "2016-11-30T06:55:32.291Z", 
"updated_at": "2016-11-30T06:55:32.291Z", 
"model": "6S Plus", 
"storage": "32GB", 
"condition": "New", 
"color": "Rose Gold", 
"country": "Hong Kong", 
"quantity": 200, 
"price": 140, 
"salesRep": "Ernie", 
"type": "Seller", 
"carrier": "Locked", 
"__v": 0 
}, 
{ 
"_id": "583e7ab02da4470dc1b2d2ae", 
"created_at": "2016-11-30T07:07:28.019Z", 
"updated_at": "2016-11-30T07:07:28.019Z", 
"model": "5S", 
"storage": "64GB", 
"condition": "Like New", 
"color": "Space Grey", 
"country": "India", 
"quantity": 203, 
"price": 120, 
"salesRep": "Ernie", 
"type": "Buyer", 
"carrier": "Locked", 
"__v": 0 
}, 
{ 
"_id": "583e86681a670110db9d7587", 
"created_at": "2016-11-30T07:57:28.765Z", 
"updated_at": "2016-11-30T07:57:28.765Z", 
"manufacturer": "Apple", 
"model": "7", 
"storage": "128GB", 
"condition": "New", 
"color": "New", 
"country": "United States", 
"quantity": 300, 
"price": 530, 
"salesRep": "Emil", 
"type": "Buyer", 
"carrier": "AT&T", 
"__v": 0 
}, 
{ 
"_id": "583e86f9d3a5bb11984fcb44", 
"created_at": "2016-11-30T07:59:53.950Z", 
"updated_at": "2016-11-30T07:59:53.950Z", 
"manufacturer": "Samsung", 
"model": "Galaxy S7", 
"storage": "64GB", 
"condition": "Like New", 
"color": "Black Onyx", 
"country": "Hong Kong", 
"quantity": 140, 
"price": 340, 
"salesRep": "Robert", 
"type": "Seller", 
"carrier": "Verizon", 
"__v": 0 
}, 
{ 
"_id": "583f2113ff9cf5134bb39a66", 
"created_at": "2016-11-30T18:57:23.214Z", 
"updated_at": "2016-11-30T18:57:23.214Z", 
"manufacturer": "Apple", 
"model": "5S Plus", 
"storage": "32GB", 
"condition": "Refurbished", 
"color": "Rose Gold", 
"country": "Hong Kong", 
"quantity": 500, 
"price": 450, 
"salesRep": "Zee", 
"type": "Seller", 
"carrier": "AT&T", 
"__v": 0 
}, 
{ 
"_id": "5845e8f827841a30e813bde8", 
"created_at": "2016-12-05T22:23:52.123Z", 
"updated_at": "2016-12-05T22:23:52.123Z", 
"manufacturer": "Apple", 
"model": "7", 
"storage": "128GB", 
"condition": "New", 
"color": "Space Grey", 
"country": "Hong Kong", 
"quantity": 500, 
"price": 760, 
"salesRep": "Zee", 
"type": "Buyer", 
"carrier": "Verizon", 
"__v": 0 
}, 
{ 
"_id": "5846f8e2133d170c7435b6ea", 
"created_at": "2016-12-06T17:44:02.126Z", 
"updated_at": "2016-12-06T17:44:02.126Z", 
"manufacturer": "Apple", 
"model": "6S", 
"storage": "64GB", 
"condition": "New", 
"color": "Rose Gold", 
"country": "United States", 
"quantity": 200, 
"price": 340, 
"salesRep": "Emil", 
"type": "Seller", 
"carrier": "Unlocked", 
"__v": 0 
}, 
{ 
"_id": "5846f90d133d170c7435b6eb", 
"created_at": "2016-12-06T17:44:45.880Z", 
"updated_at": "2016-12-06T17:44:45.880Z", 
"manufacturer": "Apple", 
"model": "6S", 
"storage": "64GB", 
"condition": "New", 
"color": "Rose Gold", 
"country": "United States", 
"quantity": 200, 
"price": 340, 
"salesRep": "Ernie", 
"type": "Buyer", 
"carrier": "Unlocked", 
"__v": 0 
} 
] 
+0

2つのオブジェクトのプロパティをループし、それらの間で一致するプロパティの数を数えることができます。このカウントに基づいて配列を並べ替えることができます。 – Barmar

答えて

1

最初。各グループをフィルタリングすることで、売り手をバイヤーから分離しましょう。

var data = [{...}] // assume is the long list of data you posted 
var buyers = data.filter(function(item) {return item.type === 'Buyer'}); 
var sellers = data.filter(function(item) {return item.type === 'Seller'}); 

は、今、私たちは2つの配列buyerssellersを持っています。私たちは今、買い手を反復処理します(例:」 『価格』)と第2のデータ、あなたの配列を比較したいものをマッチング売り手

buyers.forEach(function(buyer) { 
    sellers.forEach(function(seller) { 
    // Here we can compare our buyers and sellers. 
    // For each buyer we'll iterate over all the sellers and look for a match. 
    if (buyer.price >= seller.price) { 
     // You've found a match! now do something with it. 
     // Of course here we are comparing only price, you may want to compare 
     // multiple keys, like if it's the same product. 
    } 
    }) 
}) 
+0

ありがとうございます。これはシンプルで、魅力のように機能します! –

+0

@CynthiaWongようこそ。 njoyコーディング。 – SagiSergeNadir

0

この関数は、最初の2つのパラメータにかかりますが、検索することができます。データのあなたの配列がdataArrayの名前とあなたが価格で比較したいされたのであれば、あなたは

results = compare("price", dataArray) 

を実行します、結果は限り、それぞれ異なる価格を一覧表示オブジェクト、およびそれのための買い手と売り手が含まれていますその価格に少なくとも1人のバイヤーと売り手がいます。

var compare = function(whatToCompare, data) { 
    var results = {} 
    for (var i = 0; i < data.length; i++) { 
    if (!results[data[i][whatToCompare]]) { 
     results[data[i][whatToCompare]] = [] 
    } 
    results[data[i][whatToCompare]].push(data[i]) 
    } 
    for (var entry in results) { 
    if (results[entry].length < 2){ 
     delete results[entry] 
    } else { 
     var buyer = false 
     var seller = false 
     for (var j = 0; j < results[entry].length; j++){ 
     if (results[entry][j]["type"] === "Seller"){ 
      seller = true 
     } 
     if (results[entry][j]["type"] === "Buyer"){ 
      buyer = true 
     } 
     } 
     if (buyer === false || seller === false){ 
     delete results[entry] 
     } 
    } 
    } 
    return results 
} 
関連する問題