为什么以下indexOf(searchElement:T, fromIndex:int = 0):int
找不到对象并返回-1
?
var v:Vector.<Object> = new Vector.<Object>();
v.push({name:"Geoffrey", age:32});
trace(v.indexOf({name:"Geoffrey", age:32}));
答案 0 :(得分:4)
简单回答是Vector.indexOf()
按引用搜索。在您的代码中,您创建了两个完全独立的对象;它们可能与你相同,但那是因为你是一个人:)
const v : Vector.<Object> = new Vector.<Object>();
const geoff : Object = { name: "Geoffrey", age: 32 };
v.push(geoff);
const index : uint = v.indexOf(geoff);
trace("Geoff is at index: " + index); // Traces "Geoff is at index: 0".
如果要根据对象的属性查找对象的索引,则需要使用fori
循环。
const people : Vector.<Object> = new Vector.<Object>();
people.push({ name: "Jonny", age: 28 });
people.push({ name: "Geoffrey", age: 32 });
const needle : String = "Geoffrey";
var index : int = -1;
for (var i : uint = 0; i < people.length; i++) {
if (people[i].name == needle) {
index = i;
break;
}
}
trace(needle + " found at index: " + index);
答案 1 :(得分:2)
因为,根据文档,“使用严格相等(===)。”和{name:"Geoffrey", age:32} !== {name:"Geoffrey", age:32}
将项目与Vector元素进行比较,但这可行:
var v:Vector.<Object> = new Vector.<Object>();
var o:Object = {name:"Geoffrey", age:32};
v.push(o);
trace(v.indexOf(o));
答案 2 :(得分:2)
{}
“object literal”语法为每次使用创建Object
的新实例。 indexOf()
方法在向量中搜索指定的实例,并且因为您使用对象文字语法两次,所以您实际上是在创建两个对象。第二个与第一个(你推入向量)不同,因此无法找到。