ActionScript - indexOf Vector。<object>?</object>

时间:2011-08-28 09:50:27

标签: actionscript-3 search object vector indexing

为什么以下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}));

3 个答案:

答案 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()方法在向量中搜索指定的实例,并且因为您使用对象文字语法两次,所以您实际上是在创建两个对象。第二个与第一个(你推入向量)不同,因此无法找到。