Использование _or и _and с JXA для запроса iTunes - PullRequest
0 голосов
/ 30 марта 2019

Этот скрипт завершается с ошибкой -1700: невозможно преобразовать типы .:

tracks = Application('iTunes').tracks;
searchTerm = "Love";

//This results in Error -1700: Can't convert types.
searchQuery = {_or:
    [
        {album: {_contains: searchTerm}},
        {artist: {_contains: searchTerm}},
        {name: {_contains: searchTerm}}
    ]
};

//each of these works
searchQuery1 = {album: {_contains: searchTerm}};
searchQuery2 = {artist: {_contains: searchTerm}};
searchQuery3 = {name: {_contains: searchTerm}};

songs = '';
matches = tracks.whose(searchQuery);
for (track of matches()) {
    songs += track.name() + ", ";
}

Каждый отдельный запрос возвращает соответствующий список песен.Если я заменю searchQuery в matches = tracks.whose(searchQuery); на searchQuery1, searchQuery2 или searchQuery3, я получу список подходящих треков в соответствии с альбомом, исполнителем или именем.Но версия _or не работает с Can't convert types. Тот же формат .whose работает для запросов к приложению «Контакты» и, по-видимому, является тем, что Apple рекомендует в Фильтрация массивов .

Эквивалентный AppleScriptя использовал для проверки:

set searchTerm to "Love"
set songs to ""

tell application "iTunes"
    set matches to every track whose album contains searchTerm or artist contains searchTerm or name contains searchTerm
end tell
repeat with matchingTrack in matches
    set songs to songs & name of matchingTrack & return
end repeat

Это работает, но, конечно, запрос не может быть создан с различным количеством фильтров.Как мне сделать этот же поиск с помощью JavaScript?

...