在不更改结构的情况下为js数组指定唯一ID

时间:2015-05-06 08:39:12

标签: javascript arrays angularjs

我有很多JS数组,如下所示:

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

我想为它们分配唯一的ID,然后将这些id附加到按钮上。但是,我不知道在不改变JS数组结构的情况下我应该把id放在哪里。我正在构建一个有角度的JS应用程序,在chrome dev工具中,我注意到每个元素都有一个$$hashkey。整个阵列都有这样的属性吗?如果是这样,我该如何使用它,如果数组发生变化,它会改变吗?

我想避免进一步嵌套,也就是说,我宁愿避免做类似的事情

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

这是唯一的方法吗?如果是这样,那么在AngularJS中,我只会做ng-repeat="item in q",而不是ng-repeat="item in q.data",对吧?

2 个答案:

答案 0 :(得分: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",对吧?

答案 1 :(得分: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/