我创建了以下代码 http://jsfiddle.net/EbCUx/
var arr = [{a:1,b:2,c:3},{a:3,b:5,c:6}];
var a = arr[0];
alert(arr.indexOf(a));
var b = {a:1,b:2,c:3};
alert(arr.indexOf(b));
尽管a和b的内容相同,为什么indexOf()返回-1.. 我知道 a 是一个引用值..这就是原因吗...有人可以向我解释确切的原因吗?
最佳答案
您正在比较两个不同的对象,它们内部恰好具有相同的值,但从相等的 Angular 来看它们仍然是不同的对象。
您的原始代码:
<script>
var arr = [{a:1,b:2,c:3},{a:3,b:5,c:6}];
var a = arr[0];
alert(arr.indexOf(a));
var b = {a:1,b:2,c:3};
alert(arr.indexOf(b));
</script>
更新版本,展示如何在比较中获得匹配项。
<script>
var b = {a:1,b:2,c:3};
var arr = [b,{a:3,b:5,c:6}];
var a = arr[0];
alert(arr.indexOf(a));
alert(arr.indexOf(b));
</script>
如果您想比较两个恰好具有相同值的不同对象,则必须手动执行此操作。
关于Javascript Array.indexOf() 在应用于对象数组时显示奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438373/