Я сделал это ... Я использовал lodash
. Мой код выглядит следующим образом:
var arrayData = [];
var teatData = [
{
"Attr": [
{
"power": { "p1": "str", "t3": "str" },
"light": [
{"test": "str"},
{"test2": [ { "t4": "str" }]}
]
}
]
},
{
"Attr1": [
{
"power1": { "p2": "str", "t5": "str" },
"light1": [
{ "test3": "str" },
{ "test_x": [
{ "t_x": "str" },
{ "t_y": [
{ "t_y1": "str" }
]
}
]
}
]
}
]
}
];
function getKeyArray(data, arrayData) {
if (Array.isArray(data)) {
_.forEach(data, (obj, key) => {
this.getKeyArray(obj, arrayData);
});
} else if (_.isPlainObject(data)) {
_.forEach(data, (obj, key) => {
if (obj === "str") {
arrayData.push(key);
} else if (Array.isArray(obj) || _.isPlainObject(obj)) {
this.getKeyArray(obj, arrayData);
}
});
}
}
getKeyArray(teatData, arrayData);
console.log(arrayData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
Я исправил это, и теперь оно намного быстрее. Это был метод skipSpace ().
func skipSpace () {
for _ in spaceCount...textView.text.count {
if checkSpace() == false {
nextChar()
}
}
Когда я набираю много текста, этот диапазон цикла становится огромным (spaceCount ... textView.text.count), потому что он получает количество символов в textView, поэтому его просто нужно было изменить на фиксированное число, например: (spaceCount ... 50), и все!
Спасибо