2015-05-06 37 views
0

我有很多JS數組類似如下:分配唯一的ID,以JS數組不改變結構

q = [{ 
     "v": "blah", 
      "t": "asdfsdf", 
}, { 
     "v": "basldfasdfd", 
      "t": "blah", 
}...] 

我想分配唯一的ID給他們,然後安裝這些ID的按鈕之外,本質上。但是,我不知道我應該把id放在哪裏而不改變JS數組的結構。我正在構建一個角度JS應用程序,並且在Chrome開發工具中,我注意到了每個元素的$$hashkey。整個數組是否有這樣的屬性?如果是這樣,我該如何使用它,如果數組發生變化(它會)會改變嗎?

我想避免進一步的嵌套,即,我寧願避免做類似

q = { 
    data: [whatever was above], 
    meta: { id: 234234324, ... } 
}; 

這是唯一的辦法?如果是的話,那麼在AngularJS中,我不會做ng-repeat="item in q",我只是做ng-repeat="item in q.data",對不對?

回答

0

Angular添加了$$ hashKey來跟蹤您的更改,因此它知道何時需要更新DOM。 (more info

q = { 
    data: [whatever was above], 
    meta: { id: 234234324, ... } 
}; 

這是唯一的辦法?

我不明白爲什麼我會用另一種結構,這一個很好。

如果是這樣,那麼在angularJS,而不是做ng-repeat="item in q",我 只想做ng-repeat="item in q.data",對不對?

0

如果我明白你的問題正確,則可以使用lodash的_.indexBy()

將您的數組轉換爲對象,您可以通過按鍵調用

var q = [{ 
    "v": "blah", 
    "t": "asdfsdf", 
}, { 
    "v": "basldfasdfd", 
    "t": "blah", 
}]; 

// returns an object that has the value of v as the key 
console.log(_.indexBy(q, 'v')); 

// returns an object that has the value of t as the key 
console.log(_.indexBy(q, 't')); 

這裏是一個例如:http://jsfiddle.net/wnnr0hza/

+0

我對'lodash_.indexBy()'不太熟悉。你能解釋一下還是提供一個例子?謝謝! – thatandrey

+0

@thatandrey增加了lodash索引例如 – Filype

+0

謝謝,我現在看到它。其實,我想要做的是將q作爲一個對象,而不是個別成員,因爲我會有很多q。我想沒有比我建議的選項更好的方法了嗎? – thatandrey