2017-02-23 9 views
5

से वेरिएबल नाम पुनर्प्राप्त करके ऑब्जेक्ट वैल्यू अपडेट करें मेरे पास एक जावास्क्रिप्ट ऑब्जेक्ट है जो इस तरह दिखता है। जावास्क्रिप्ट: स्ट्रिंग

var myObj = [ 
    { 
    "HOLIDAY": { 
     "Sun": "Date", 
     "Mon": "Date", 
     "Tue": "Date", 
     "Wed": "Date", 
     "Thr": "Date", 
     "Fri": "Date", 
     "Sat": "Date" 
    } 
    } 
] 

और मैं कुछ HTML कोड जो इस

<input data-event="change" 
      data-variable="myObj" 
      data-bind="[0]['HOLIDAY']['Sun']" 
      type="text"> 

तरह लग रहा है एचटीएमएल मैं संग्रहीत है जो JavaScript वैरिएबल संशोधित करने के लिए करता है, तो मुझे लगता है कि क्षेत्र में कोई भी परिवर्तन करने के पर है। मैंने जावास्क्रिप्ट कोड लिखा है जो इस तरह दिखता है।

$(document).on('change', '[data-event= change]', function(){ 
    //get-variable-name where to bind data 
    //Get object location inside the variable 
    var sVarName = $(this).data('variable'); 
    var sObjLoca = $(this).data('bind'); 
    eval(sVarName+sObjLoca +' = ' $(this).val()); 
}); 

इस समस्या का किसी भी बेहतर दृष्टिकोण है, वर्तमान में मैं eval() उपयोग कर रहा हूँ जो मैं का उपयोग नहीं करना चाहते हैं, के रूप में कई तत्वों 'परिवर्तन' घटना और शो 'eval के प्रदर्शन को प्रभावित कर सकता होगा मेरे कोड का

+1

पहले आप 2 डेटा गुण ही – madalinivascu

+0

चांग नामित किया गया है? क्या यह बदलना चाहिए? '[डेटा-बाइंड = ऑनचेंज] '... क्या यह' [डेटा-बाइंड = ऑन चेंज] 'होना चाहिए? इतनी ग़लतता –

+1

पहला '.on ('chang',' होना चाहिए। '(' बदलें ',' दूसरा, * क्या कोई बेहतर तरीका है *, यदि प्रश्न सुधार/अनुकूलन के बारे में है, तो कृपया इसे कोड समीक्षाओं पर पोस्ट करें – Rajesh

उत्तर

3

// Input 
 
var myObj = [{ 
 
    "HOLIDAY": { 
 
    "Sun": "Date", 
 
    "Mon": "Date", 
 
    "Tue": "Date", 
 
    "Wed": "Date", 
 
    "Thr": "Date", 
 
    "Fri": "Date", 
 
    "Sat": "Date" 
 
    } 
 
}] 
 

 
// Function 
 
function updateObject(object, newValue, path) { 
 
    var stack = path.replace(/\]\[/g, '.').replace(/['"\[\]]/g, '').split('.'); 
 

 
    while (stack.length > 1) { 
 
    object = object[stack.shift()]; 
 
    } 
 
    object[stack.shift()] = newValue; 
 
    return object; 
 
} 
 

 
// Output 
 
console.log(updateObject(myObj, 'test1', "[0]['HOLIDAY']['Sat']")); 
 
console.log(updateObject(myObj, 'test2', "[0]['HOLIDAY']['Tue']")); 
 

 
// Can also set like below 
 
console.log(updateObject(myObj, 'otherway', "0.HOLIDAY.Wed"));

संबंधित मुद्दे