שרשור ערכים בקוד JS
-
וכשהאינדקס הוא דינמי ויכול לכלול כמה איברים עד שמגיעים לתוצאה הרצויה, כזה:
var index = "chatuna.rikudim.rikudimrishonim";
באיזה כיוון אני אמור לגשת לצורך הצמדת כל האיברים?
["chatuna"]["rikudim"]["rikudimrishonim"]
כדי שאוכל אח"כ להצמיד את האינדקס לשליפת המערך/ הנתון הרצוי?
var bbb = aaa[index];
תודה.
-
@chagold אמר בשרשור ערכים בקוד JS:
chatuna.rikudim.rikudimrishonim"
function getNestedObj(obj, arr){ var last = obj; for(var i = 0; i < arr.length; i++) last = last[arr[i]]; return last; }
תשתמש עם זה ככה:
var obj = {chatuna: { rikudim: { rikudimrishonim: "dagim" } } }; var path = "chatuna.rikudim.rikudimrishonim"; getNestedObj(obj, path.split('.'))
-
@dovid אמר בשרשור ערכים בקוד JS:
@chagold אמר בשרשור ערכים בקוד JS:
chatuna.rikudim.rikudimrishonim"
תשתמש עם זה ככה:
var obj = {chatuna: { rikudim: { rikudimrishonim: "dagim" } } }; var path = "chatuna.rikudim.rikudimrishonim"; getNestedObj(obj, path.split('.'))
או בקצרה עם ספריית lodash.
var obj = {chatuna: { rikudim: { rikudimrishonim: "dagim" } } }; _.get(obj, 'chatuna.rikudim.rikudimrishonim')
-
https://jsfiddle.net/dhpq4fok/10/
הבעיה שהוא לא מזהה את המשתנה $data. למה? -
לא. הבעיה שאתה מעביר נתיב שלא קיים.
בתור אובייקט נתת את appaa.$data.foo שזה אומר שורה תחתונה תוכנו של foo.
בתור נתיב נתת את "appaa.$data.foo.chatuna.rikudim.rikudimrishonim"
הפוקנציה מנתחת את זה כאילו כתוב ככה:appaa.$data.foo["appaa"]["$data"]["foo"]["chatuna"]["rikudim"]["rikudimrishonim"]
הבעיה שappaa.$data.foo אין אלמנט בשם appaa.
אילו היית מעביר רק את הנתיב הנדרש, למשל: "chatuna.rikudim.rikudimrishonim", זה היה עובד יופי.
לחילופין יכול להעביר במקום את appaa.$data.foo, את appaa לבד, ובתור נתיב את הכל (מלבד שם האב - שהרי אין בappaa אלמנט בשם appaa) ככה:var path = "$data.foo.chatuna.rikudim.rikudimrishonim";
-
@dovid אמר בשרשור ערכים בקוד JS:
chatuna.rikudim.rikudimrishonim
עדיין לא עובד
https://jsfiddle.net/dhpq4fok/12/ -
@chagold אמר בשרשור ערכים בקוד JS:
@dovid אמר בשרשור ערכים בקוד JS:
chatuna.rikudim.rikudimrishonim
עדיין לא עובד
https://jsfiddle.net/dhpq4fok/12/נכון כי לfoo אין אלמנט בשם chatuna. אלא הוא מערך שמכיל איבר בודד שבתוכו יש אלמנט בשם chatuna.
אתה יכול להעביר לו appaa.$data.foo[0] או להוסיף לנתיב את האפס ככה:"0.chatuna.rikudim.rikudimrishonim.name"