Angular 中索引的检测:indexOf() 由于 $$hasKeys 而无法正常工作?
Detection of Index in Angular: indexOf() does not work properly because of $$hasKeys?
以下情况:
role: { roleid=3, name="admin"}
availableRoles:
[
{ roleid=3, name="admin", $$hashKey="object:222"},
{ roleid=4, name="plain user", $$hashKey="object:223"}
]
currentRoles:
[
{ roleid=3, name="admin"}
]
以下尝试:
currentRoles.indexOf(role); // works properly and outputs 0
availableRoles.indexOf(role); // does not work
我可以想象,这是因为 $$hasKeys。但我没有把它们放在那里,AngularJS 确实增加了这些数据。
我该如何克服这种情况?
是否有像这样的功能:忽略此数据结构中的 Angular HasKeys?
编辑:
Angular对象比较:
Compare objects in Angular
所以你可以只写函数:
function arrayObjectIndexOf(arr, obj){
for(var i = 0; i < arr.length; i++){
if(angular.equals(arr[i], obj)){
return i;
}
};
return -1;
}
--原创--
JavaScript将对象保存为指针,因此,即使两个对象中有相同的数据,也有不同的值(指针在内存中的值)。
代码示例:
var role = { roleid:3, name:"admin"};
var availableRoles =
[
{ roleid:3, name:"admin"},
{ roleid:4, name:"plain user", $$hashKey:"object:223"}
];
alert(availableRoles.indexOf(role));
http://codepen.io/anon/pen/BjobaW
因此与hashKey无关。要与对象进行比较(例如,在数组中找到索引),您必须创建一个比较循环,或者重载对象的“==”运算符来比较值而不是指针,我认为您不能这样做JS.
最好不要有这样的对象...
您可以使用 angular 过滤器:
function contains(arr, id) {
return $filter('filter')(arr, {roleid : id}, true).length != 0;
}
- 您可以使用其他一些 js 库(lodash、underscore 等)。
以下情况:
role: { roleid=3, name="admin"}
availableRoles:
[
{ roleid=3, name="admin", $$hashKey="object:222"},
{ roleid=4, name="plain user", $$hashKey="object:223"}
]
currentRoles:
[
{ roleid=3, name="admin"}
]
以下尝试:
currentRoles.indexOf(role); // works properly and outputs 0
availableRoles.indexOf(role); // does not work
我可以想象,这是因为 $$hasKeys。但我没有把它们放在那里,AngularJS 确实增加了这些数据。
我该如何克服这种情况?
是否有像这样的功能:忽略此数据结构中的 Angular HasKeys?
编辑:
Angular对象比较: Compare objects in Angular
所以你可以只写函数:
function arrayObjectIndexOf(arr, obj){
for(var i = 0; i < arr.length; i++){
if(angular.equals(arr[i], obj)){
return i;
}
};
return -1;
}
--原创--
JavaScript将对象保存为指针,因此,即使两个对象中有相同的数据,也有不同的值(指针在内存中的值)。
代码示例:
var role = { roleid:3, name:"admin"};
var availableRoles =
[
{ roleid:3, name:"admin"},
{ roleid:4, name:"plain user", $$hashKey:"object:223"}
];
alert(availableRoles.indexOf(role));
http://codepen.io/anon/pen/BjobaW
因此与hashKey无关。要与对象进行比较(例如,在数组中找到索引),您必须创建一个比较循环,或者重载对象的“==”运算符来比较值而不是指针,我认为您不能这样做JS.
最好不要有这样的对象...
您可以使用 angular 过滤器:
function contains(arr, id) { return $filter('filter')(arr, {roleid : id}, true).length != 0; }
- 您可以使用其他一些 js 库(lodash、underscore 等)。