Ich habe eine riesige Tabelle mit vielen Zeilen, die denselben Namen, aber unterschiedliche Elemente in jeder Zeile haben. Wenn ich folgende
rows = table.rows.whose (searchFilter)()
Und wenn ich rows.length, dann bekomme ich die richtige Nummer für die Suche. Die Arrays haben jedoch nur eine mehrfach wiederholte erste Zeile. Ich nehme an, es liegt daran, dass alle Zeilen denselben Namen haben und deren Objektbezeichner basierend auf byName() zurückgegeben werden. Ich kann filtern, indem ich jede Zeile mit JavaScript durchführe, aber es dauert wirklich sehr lange. Deren scheint den richtigen viel schneller zu filtern, gibt aber falsche Zeilen zurück. Gibt es einen Workaround dafür?
Danke!AppleScript JXA-Filtertabelle mit vielen Zeilen mit demselben Namen, aber verschiedenen Elementen
Antwort
Sie sagen nicht, welche App Sie scripten (was helfen würde), aber es klingt, als wäre es kein JXA-Problem, sondern ein Programm, da es die Zielanwendung ist, die entscheidet, ob Sie zurückkommen -Index, Name oder By-ID-Spezifizierer. Nur By-ID-Spezifizierer sind garantiert sowohl stabil als auch einzigartig (ihr einziger Nachteil besteht darin, dass die ID-Werte im Gegensatz zu den anderen nicht lesbar sind), aber viele Apps geben By-Index- oder Name-Formulare zurück; Ersteres ist ein Problem, wenn Elemente sich bewegen, letzteres, wenn Elementnamen nicht eindeutig sind.
Ich denke, Ihre einzige praktische Option ist es, die Zeilenwerte zu finden, dann zählen Sie selbst, um Ihre eigenen Index-Spezifizierer zu erstellen, wenn eine Reihe von Zeilenwerten Ihren Anforderungen entspricht. Auf diese Weise senden Sie immer noch nur ein paar Apple-Ereignisse insgesamt (d. H. Eine AE, um alle Werte aus einer einzelnen Spalte abzurufen), anstatt mehrere Ereignisse pro Zeile zu senden. Die Handhabung einer AE ist eine teure Operation. Wenn Sie also weniger komplexe Abfragen verwenden, um die gleichen Daten abzurufen, wird das viel billiger sein als die Verwendung vieler einfacher, selbst wenn Sie die Daten noch selbst sammeln es in die Form, die Sie eigentlich wollen.
z.B. In Apple [1], könnte man so etwas schreiben:
tell app "Whatever"
set allFoos to get value of cell "foo" of every row of theTable
set allBars to get value of cell "bar" of every row of theTable
set foundRefs to {}
repeat with i from 1 to length of allNames
if item i of allFoos is myFoo and item i of allBars is myBar then
set end of foundRefs to row i of theTable
end if
end repeat
end tell
-- foundRefs list now contains by-index refs to the matched rows
(Here's another example wenn es den Punkt hilft illustrieren.)
Herauszufinden, wie der entsprechenden Code in JXA zu schreiben, von links nach jemandem dumm genug zu benutze das kaputte POS an erster Stelle. [2]
-
[1] Ironischerapple Listen haben O(n)
Leistungsnachschlag wegen crappy interne Implementierung (wie Array
Typ JS, AS-Listen tatsächlich Vektor-Arrays sind, sollten so sein O(1)
, aber sie bekommen, um tatsächlich Verhalten auf diese Weise erfordert kludging in zusätzlichen AS-Code, um die Laufzeit zu umgehen, um das beschissene Bit zu umgehen). Der gezeigte AppleScript-Code wird also abnormal schlecht funktionieren, aber sein Zweck ist hier nur, den allgemeinen Algorithmus zu demonstrieren, nicht ein Produktionsskript, also werde ich es nicht mit kludgy crap [2] verschleiern.
[2] Es gibt einen Grund, warum ich Poxen sowohl auf AS- als auch auf JXA-Häuser rufe, und halte mich selbst daran, appscript zu benutzen. Blame Apple, um eine ihrer größten, benutzerfreundlichsten Innovationen (Endbenutzer-Desktop-Automatisierung) direkt auf den Abfluss zu pissen und nicht einmal zu bemerken, dass sie es geschafft haben.
- 1. Arrays mit demselben Namen aus verschiedenen Dateien in PHP aufnehmen?
- 2. VS-Code: Gruppendateien mit demselben Namen und verschiedenen Erweiterungen
- 3. demselben Namen in verschiedenen Straßennamen enthalten - geocode.arcgis.com
- 4. Python - Mehrfachvererbung mit demselben Namen
- 5. Wiedergabe von vielen Audiodateien mit demselben Audioelement
- 6. Wie füge ich Zeilen mit demselben Namen in R zusammen?
- 7. Mehrere Optionsfeldgruppen mit demselben Namen
- 8. Enum & Klassenmitgliedsfunktion mit demselben Namen
- 9. Log4j2 Mit demselben Appender aber verschiedenen Dateinamen für mehrere Logger
- 10. JAXB unmarshall XML mit demselben Tag-Namen, aber unterschiedlicher Struktur
- 11. Wie Spalten mit demselben Namen, aber unterschiedliche Bezeichner in R
- 12. Mit vielen verschiedenen HTML-Seite mit Express
- 13. Senden von Formularelementen mit demselben Namen
- 14. Auswählen von Max mit vielen anderen Elementen
- 15. RecyclerView mit vielen Elementen funktioniert nicht korrekt
- 16. Deserialize XML-Sammlung mit möglichen verschiedenen Elementen aber derselben Klasse
- 17. Wie in Knoten mit demselben Namen Schleife
- 18. Unmarshal geschachtelte Arrays mit identischem Namen, aber separaten Elementen gehen
- 19. Parsen von OpenXML mit Elementen, die auch Geschwister mit demselben Namen sind
- 20. Zeilen mit demselben Benutzer mit verschiedenen Währungen zusammenführen, die dynamisch mit codeigniter und mysql generiert wird
- 21. Erstellen von XML mit demselben Tag-Namen
- 22. Modul und Klasse mit demselben Namen
- 23. typedef und Template-Parameter mit demselben Namen
- 24. Wie zwei Tabellen mit demselben Namen in zwei verschiedenen Schema in mysql mit Django verwenden
- 25. Multiple Form mit demselben Namen Array
- 26. Filtern von JSON-Daten mit demselben Namen
- 27. Mit demselben Objekt in verschiedenen Paketen
- 28. Mehrere HTTP-Header mit demselben Namen festlegen?
- 29. Ist HttpServletResponse.addCookie() mit demselben Cookie-Namen sicher?
- 30. Pandas, die Zeilen mit demselben Wert und demselben Index zusammenführen
Vielen Dank für die Antwort! Das ist sehr vielversprechend !!! Danke, dass Sie auf SwiftAE hingewiesen haben. Es wird praktisch! – chibop
SwiftAE ist Alphaware und nicht voll funktionsfähig, also benutze es nicht für den Moment (Swifts Typsystem ist problematisch, daher funktioniert das Entpacken der Liste und der Aufzeichnungsergebnisse noch nicht, und ich muss es auch noch mit Swift3 fertigstellen).Ich weise nur auf seine Dokumentation als Referenz hin, weil es, obwohl es nicht großartig ist, immer noch viel informativer ist als alles auf Apples Website. – foo
Bekam es. Die Lösung funktioniert vollkommen! Es spart viel Zeit! Vielen Dank! – chibop