2017-02-23 40 views
5

檢索變量名的對象值我有一個JavaScript對象,它看起來像這樣。 的JavaScript:更新由字符串

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"> 

在HTML我已經存儲了JavaScript變量,如果我做任何改變,該字段進行修改。我寫了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

昌?應該是改變? '[數據綁定=平變化]'...應該說是'[數據綁定=的onChange]'?這麼多的不正當 –

+1

第一個'。對(「昌」,'應該'。對(「變」,'。其次,*有沒有更好的方法*,如果問題是關於改進/最佳化,請張貼在CodeReviews – 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"));