2015-05-06 33 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