2014-02-06 31 views
4

我試圖通過下面的「carObj」進行篩選,因爲用戶從頁面上的列表中選擇「篩選器」並僅顯示「匹配」子對象。通過JavaScript中的JSON子對象進行篩選

當前,當用戶選擇一個「過濾器」它被添加到「filterObj」,然後我滾動通過「carObj」像8 $ .each語句拉出所有匹配的子對象。我在價值觀上進行匹配,並多次滾動來實現它。例如,假設下面的例子,只有「carObj」中的第三個子對象將被「返回」,並帶有它的所有值。就其本身而言,我將所有匹配的屬性設置爲「TRUE」,對於任何不匹配的都設置爲「FALSE」。

然後在網頁上瀏覽「carObj」中所有TRUE值的子對象,並在表格中顯示其信息/值。

我不確定這是否是最有效的方法。

/* Object filled as user selects "filters" */ 
filterObj ={ 
    "Seats": {}, 
    "color": { 
     "Orange": "Orange", 
     "Red": "Red" 
     }, 
    "Transmission": { 
     "Manual": "Manual" 
    }, 
    "Make": { 
     "Ford": "Ford" 
    }, 
    "Model": {}, 
    "Status": { 
     "New": "New" 
     } 

} 

/* Main object that contains all cars */ 
carObj = { 
    "cars": [ 
    { 
     "seats":"6", 
     "color":"Red", 
     "transmission":"Automatic", 
     "make":"Ford", 
     "model":"Windstar", 
     "status":"New", 
    }, 
    { 
     "seats":"4", 
     "color":"Black", 
     "transmission":"Manual", 
     "make":"Mazda", 
     "model":"CRX", 
     "status":"New", 
    }, 
    { 
     "seats":"2", 
     "color":"Orange", 
     "transmission":"Manual", 
     "make":"Ford", 
     "model":"Galaxy", 
     "status":"New", 
    } 
    ] 
} 

回答

3

這是一個艱難的。請參閱this fiddle

注意事項:

  • 沒有用在你的過濾器對象的對象。我用於簡單陣列:

    "color": { 
        "Orange": "Orange", 
        "Red": "Red" 
    }, 
    

    "color": ["Orange", "Red"], 
    

    這將是更簡單和邏輯;

  • 我已經改變了所有數組和對象中大寫字母的第一個字母。算法不得不關注它的其他方式,並沿着它的功能進行調整。我將其固定到腳本變得更小,但如果它希望它可以處理非標準鍵名;

  • 該函數返回從carObj匹配任意過濾條件,並非全部的任何物體。但它可以做到。

總之我不太確定它的工作是否100%。但它是一個嘗試。如果你發現一些錯誤/錯誤讓我現在。

我希望它有幫助。

UPDATE:

我已經更新了代碼,在每個至少一個值匹配所有過濾器。見this Fiddle

所以,現在如果富人Color["Orange"]車有這種顏色的順序相匹配來選擇,如果Color["Orange", "Red"],那麼汽車必須匹配OrangeRed。像Color: []這樣的過濾器將被忽略。

+0

謝謝!這個數組更有意義。過濾器對象只是感覺不對。我正在穿過小提琴,對我來說有點複雜,但我正在進行控制檯錄音。看起來好像是在任何比賽中都拉出來,而不是「全部」的比賽。當我在控制檯註銷「cars [n] [f [i]]」和「cars [n] [f [i]]」時,它會顯示「紅色」,「手動」和「橙色」的匹配。但唯一真正的匹配是帶有手冊的橙色汽車。我會繼續玩,但如果你想出點什麼,請告訴我。 – Robert

+0

@Robert yes與任何屬性匹配。它應該只與所有人匹配? – DontVoteMeDown

+0

是的,它只會產生一個「匹配」。任何具有倍數的東西,比如「橙色」和「紅色」都是「OR」情況。就像我不知道你是否熟悉MySQL,但是如果它是一個DB:[SELECT * from'carObj' WHERE('color' =「orange」or'color' =「red」)AND'transmission' = 「手動」和「狀態」=「新」]。不知道這是多少有點混淆...... – Robert

相關問題