סינון מערך התלוי בנתוני כמה פרמטרים (שחלקם לא יגיעו) - js
-
אתה רוצה לאפשר למשתמש לסנן לפי שם או כתובת וכו'?
https://jsfiddle.net/oh67frLy/ -
@יוסף-בן-שמעון לא הבנתי איך צירפת בזה 2 סינונים שונים.
-
@chagold אמר בסינון מערך התלוי בנתוני כמה פרמטרים (שחלקם לא יגיעו) - js:
איך צירפת בזה 2 סינונים שונים
אשמח להסביר, אבל לא הבנתי את הניסוח, מה זה "2 סינונים שונים"?
-
יש לקוח שרוצה לסנן לפי פרמטר 'שם'
ויש לקוח שרוצה לסנן לפי פרמטר 'מדינה'
ולקוח שלישי רוצה לסנן לפי שניהם, או לא לסנן בכלל.
ואני לא רוצה לחשבן את כל האפשרויות, אלא שרק שדה שהלקוח כלל אותו הוא יכלל בסינוןאז בדוגמא שהבאתי יש סינון לפי 2 פרמטרים.
אבל איך עושים את המשפט בצורה שפרמטר אחד מותנה אם הלקוח התייחס אליו או לא? -
הדוגמא ש@יוסף-בן-שמעון סיפק עונה בשלמות על מה שביקשת, וזה מה שהוא הבין לכתחילא:
הקריאה לפונקציית הסינון כוללת אובייקט:
filter({ name: 'david', city: 'jerusalem' })
משמעותו של המקרה הזה: עיר ששמה ירושלים ושם ששמו דוד.
אם תוסיף מאפיינים או תסיר זה יסנן בהתאם.אלא שהוא הציג לך ברמת הקוד. ברמת התצוגה תצטרך לדאוג ששדות הסינון יאוגדו לאובייקט שיהיה ריק בלי שמשימים ערכים בשדות האלה, ואת האובייקט הזה תעביר למתודת הסינון בדיוק כמו בדוגמה.
-
@chagold אם תמיד תרצה או, אז זה שינוי קל בקוד של @יוסף-בן-שמעון, במקום:
for (let i in filterBy) { if (user[i] !== filterBy[i]) return false; } return true;
אז תכתוב
for (let i in filterBy) { if (user[i] == filterBy[i]) return true; } return false;
אבל אם תרצה שיהיה סטים של תנאים, שדי בהתאמה של סט אבל כל סט הוא "גם", אז צריך לשכלל את הקוד ככה:
array = [ { name: "david", city: "jerusalem"}, { name: "yosef", city: "bne-brak"}, { name: "moshe", city: "jerusalem"} ] function filter(conditionArr) { if(!conditionArr || !conditionArr.length) return array; return array.filter(function(el){ for (let set of conditionArr) if(filterElement(el, set)) return true; return false; }); } function filterElement(element, filterBy) { for (let i in filterBy) if (element[i] !== filterBy[i]) return false; return true; } let results = filter([{ name: 'david'},{city: 'bne-brak' }]);
-
@dovid דבר ראשון תודה על ההשקעה.
כל הרעיון אצלי הוא שאין משהו קבוע - לא סט קבוע חיובי ולא של או זה או זה, אלא תלוי אם המשתמש הזין ערך בתיבת החיפוש.
עכשיו עלה לי רעיון פשוט, השאלה איך אפשר ליישם אותו, שיהיה תנאי על כל שדה אם יש בו ערך ואז הוא יצורף למשפט, משהו בסגנון (של) https://jsfiddle.net/wm6hrv95/1/
-
@chagold אמר בסינון מערך התלוי בנתוני כמה פרמטרים (שחלקם לא יגיעו) - js:
כל הרעיון אצלי הוא שאין משהו קבוע - לא סט קבוע חיובי ולא של או זה או זה, אלא תלוי אם המשתמש הזין ערך בתיבת החיפוש.
ולמה הקוד של דוד לא מספק אותך? אם המשתמש הזין ערך אז תאגד אותו לאוביקט, ואם לא אל תאגד
-
@יוסף-בן-שמעון @dovid מעולה.
תודה רבה
(עריכה)https://jsfiddle.net/bmp4r19v/