2016-11-04 93 views
0

我是JavaScript新手,我試圖用鍵值對構建一個數組,並且我已經成功完成了該操作。檢測重複的鍵,並在javascript中的數組內替換它的值

這是我的電流輸出:

My current Output:

現在,我要的是檢查在array.If鍵已經存在則對應鍵的值將被更新每個對象的關鍵否則將插入一個帶有其值的新密鑰。

我的代碼:

function pushToAry(name, val) { 
//alert("In the array"); 
var flag=1; 
    kony.print("name-->"+name+" val-->"+val); 
    for (var i in ARY) { 
    kony.print("ARY[i].name-->"+ARY[i].name+" ARY[i].val-->"+ARY[i].val); 
    if (ARY[i].name == name) { 
    kony.print("In if"); 
     ARY[i].val = val; 
     flag=0; 
     break; //Stop this loop, we found it! 

    }else{ 
     kony.print("In else"); 
    } 
    } 


    if(flag==1){ 
    kony.print("flag is 1-->"+flag); 
    var obj = {}; 
    obj[name] = val; 
    ARY.push(obj); 
    } 
} 

我上面的代碼不工作。 ARY [i] .name和ARY [i] .val即將推出

ARY是一個全局數組定義爲ARY=[];

我在這裏做什麼錯?

+1

你的數據結構是有點奇怪。您有一組對象,每個對象都有一個屬性。這聽起來像是你真正想做的事情,但是一個Javascript對象本身可以讓你做一些非常相似的事情:'var foo = {}; foo [name] = val;' – Tibrogargan

+0

請看看這篇文章 - > http://stackoverflow.com/a/1988361/4361743 – karman

+0

Downvoter謹慎解釋?? – kgandroid

回答

1

這應該工作

function pushToAry(name, val) { 
 
     for (var i = 0; i < ARY.length; i++) { 
 
      if (ARY[i].hasOwnProperty(name)) { 
 
       ARY[i][name] = val; 
 
       return; 
 
      } 
 
     } 
 
    
 
     var obj = {}; 
 
     obj[name] = val; 
 
     ARY.push(obj); 
 
    } 
 

 
    function init() { 
 
     ARY = []; 
 
     pushToAry("Label", 1000.0); 
 
     pushToAry("Label", 1000.1); 
 
     console.log(`ARY has ${ARY.length} entries`); 
 
     console.log(`ARY[0].Label: ${ARY[0].Label}`); 
 
    } 
 

 
    document.addEventListener("DOMContentLoaded", init, false);

+0

讓我試試..... – kgandroid

+0

給編譯錯誤解析錯誤。失蹤 ;在for循環初始化之後(讓elem的ARY) – kgandroid

+0

我相信你有一個錯字,這個片段的作品。 – Tibrogargan