ActionScript - indexOf Vector. <Object>? - PullRequest
       19

ActionScript - indexOf Vector. <Object>?

0 голосов
/ 28 августа 2011

почему следующее 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 ]

4 голосов
/ 28 августа 2011

Простой ответ: 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);
2 голосов
/ 28 августа 2011

Синтаксис {} "литерал объекта" создает новый экземпляр из Object для каждого использования. Метод indexOf() выполняет поиск указанного экземпляра в векторе, и поскольку вы дважды используете синтаксис литерала объекта, вы фактически создаете два объекта. Второй не совпадает с первым (который вы вставили в вектор) и, следовательно, не будет найден.

2 голосов
/ 28 августа 2011

Потому что, согласно документу, «элемент сравнивается с элементами вектора с использованием строгого равенства (===).» И {name:"Geoffrey", age:32} !== {name:"Geoffrey", age:32}, однако это будет работать:

var v:Vector.<Object> = new Vector.<Object>();
var o:Object = {name:"Geoffrey", age:32};
v.push(o);

trace(v.indexOf(o));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...