Простое сравнение объектов JavaScript - PullRequest
0 голосов
/ 11 июня 2011

Я пытаюсь передать простую строку в прослушиватель событий, чтобы определить соответствующий объект массива для изменения. Глядя на журнал (показанный в комментариях), я понимаю, что то, что я передаю, является объектом и его нельзя сравнивать напрямую со свойством другого объекта.

Должен ли я передать объект со строкой в ​​качестве свойства (как это делает объект массива), или есть более подходящий способ ссылаться на объект как строку или как-то вызвать его имя (как журнал делает в первом комментарии)

// I just want to pass a string as an argument. Here is a static example.
var timestampID = '1307740835264';
Ti.App.fireEvent('confirmation',timestampID);

Обратите внимание, как первый вывод журнала интерпретирует аргумент как строку, но сравнение if распознает его как объект.

Ti.App.addEventListener('confirmation',function(timestampID) { // produces "[DEBUG] fire app event: confirmation with 1307740835264"
    Ti.API.info(timestampID); // produces "[INFO] { type = confirmation; }"
    for (i=0;i<myArray.length;i++) {
        Ti.API.info(myArray[i].timestampID + ' | ' + timestampID); // produces "[INFO] 1307740835264 | [object Object]"
        if (myArray[i].timestampID == timestampID) { // will produce false
            // will never happen
        }
    }
});

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Так что мне кажется, что timestampID, передаваемый в обработчик, является объектом, однако из второго утверждения (и сопровождающего комментария [INFO]) я совершенно не представляю, какими свойствами он обладает.Давайте предположим, что у него есть свойство с именем timestamp.Тогда ваше if утверждение должно быть

if (myArray[i].timestampID === timestampID.timestamp) 

Но это все, что я могу почерпнуть из этого фрагмента кода, боюсь.

ОБНОВЛЕНИЕ : ОК, япосмотрим, как вы запускаете событие.В этом вопросе API-интерфейс Titanium не совсем понятен (похоже, что справка для fireEvent неверна: два параметра называются «имя»?).Там нет примеров, которые я могу видеть.Однако в нем говорится, что то, что вы передаете в качестве данных, (должно быть?) Сериализовано как JSON.

Теперь, когда я знаю, что, глядя на строку [INFO] второго утверждения, становится больше смысла.Это строка с данными JSON.Ваши данные отсутствуют, так как это было строковое значение.Попробуйте запустить:

Ti.App.fireEvent('confirmation', { timestampID: '1307740835264' } );

и это в обработчике событий:

Ti.App.addEventListener('confirmation', function (data) {
  for (i=0;i<myArray.length;i++) {
    if (myArray[i].timestampID === data.timestampID) { 
        ...code...
    }
}

});

0 голосов
/ 11 июня 2011

Либо напишите функцию сравнения, либо найдите скалярное свойство (Число или Строка), которое вы хотите сравнить.

...