Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472

Нужно упростить/сократить код функции

20.08.2014, 14:54. Показов 1798. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<html><head></head><body>
        <script type="text/javascript">
            //функция, принимающая текст и создающая по нему объекты, возвращает функцию, 
            //которая принимает текст и выводит объекты, у которых в свойствах есть этот текст
            function compile_csv_search(text){
                //получаем строку с именами переменных
                var arrVar = text.split('=');
                //получаем строку из имён переменных
                var arrValGroup = arrVar[0];
                //получаем их имена в виде массива
                arrVar = arrValGroup.split(',');
                //получаем количество переменных
                var l = arrVar.length;
                //получаем строку всех значений переменных без имён переменных
                arrValGroup = text.replace(arrValGroup+"=","");
                //получаем из них массивы со строками груп значений
                arrValGroup = arrValGroup.split(';');
                //создаём массив для объектов
                var arr = new Array,arrVar, obj;
                //обрабатываем массивы груп - создаём из строк объекты и добавляем в массив обектов
                for (var i in arrValGroup) {
                    //получаем массив из значений
                    arrVal = arrValGroup[i].split(',');
                    //создаём объект
                    obj = {};
                    //обходим массив имён переменных, создаём свойство по имени и даём ей значение текущей переменной группы
                    for (var i2 = 0; i2 < l; i2++) obj[ arrVar[i2] ] = arrVal[i2];
                    //добавляем объект в массив
                    arr.push( obj );
                }
                //возвращаем функцию
                return function(str){ 
                    //обходим массив объектов и их свойства 
                    for(var i2 in arr) for(var prop in arr[i2])
                            //если строка находится в свойстве, то объект будет выведен
                            if (arr[i2][prop].indexOf(str) != -1) {console.log( arr[i2] );break};
                };
            }
            
            //создание функции
            var csv_by_name = compile_csv_search(
                "ip,name,desc,mm="+ //переменные
                "10.49.1.4,server1,Main Server,Fire;"+ //группа значений1
                "10.52.5.1,server2,Backup Server,Earth;"+ //2
                "10.,s,Ba,Water" //3
            );
            //вызов функции
            csv_by_name("Water");
            csv_by_name("Fire");
        </script>
    
</body></html>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.08.2014, 14:54
Ответы с готовыми решениями:

Упростить код функции вызывающая с вдумя парами скобок
Есть код который находит определенный интеграл: const splits = 500; function calculate(lower, upper, func) { const...

Сократить JS-код
Добрый день. Как можно сократить этот JS-код? $(document).ready(function(){ $(&quot;.btn-mymodal&quot;).click(function() { ...

Сократить код
Доброго времени суток. Есть такое задание: по значениям из заполненной формы строится процентная диаграмма. Код у меня, хоть и довольно...

16
qm
25 / 24 / 7
Регистрация: 15.08.2014
Сообщений: 60
20.08.2014, 15:23
Предлагаю избавиться от комментариев, они тут ни к чему.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 16:05
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function compile_csv_search(data){
    var temp = data.split("=");
    var props = temp[0].split(",");
    var arrValGroup = temp[1].split(';');
    var arr = [];
    for(var i = 0; i < arrValGroup.length; i++){
        var values = arrValGroup[i].split(',');
        var obj = {};
        for (var j = 0; j < props.length; j++) {
            obj[props[j]] = values[j];
        }
        arr.push(obj);
    }
    /*
    return function(str){
        for (var i = 0; i < arr.length; i++){
            for (var j = 0; j < props.length; j++) {
                if (arr[i][props[j]].indexOf(str) != -1) {
                    console.log(arr[i]);
                    break;
                };
            }
        }
    };
    */
    return function(str){
        arr.forEach(function(obj){
            for (var j = 0; j < props.length; j++) {
                if (obj[props[j]].indexOf(str) !== -1) {
                    console.log(obj);
                    break;
                };
            }
        });
    };
}
 
var csv_by_name = compile_csv_search(
    "ip,name,desc,mm="+
    "10.49.1.4,server1,Main Server,Fire;"+
    "10.52.5.1,server2,Backup Server,Earth;"+
    "10.,s,Ba,Water"
);
 
csv_by_name("Water");
csv_by_name("Fire");
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
20.08.2014, 20:52  [ТС]
А можно ли ещё меньше кода сделать?
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 21:14
Gvizl, короче будет только в ущерб производительности и читаемости
1
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.08.2014, 21:17
Gvizl, я видел в F.A.Q или в обмене готовыми изделиями видел толи сжимлку толи шифровалку
во нашёл http://chulanchik.ucoz.com/news/2012-05-08-778
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 21:24
BANO, что это за бред? это даже не минимизер

для сжатия есть closure compiler
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.08.2014, 21:25
nubideus, извените не разбераюся
для меня он непонятнее стал я и подумал что короче
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 21:31
Gvizl,
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function csv_by_name(data, str){
    var props = data.split("=")[0].split(",");
    var arrValGroup = data.split("=")[1].split(';');
    for(var i = 0; i < arrValGroup.length; i++){
        var values = arrValGroup[i].split(',');
        var obj = {};
        var found = false;
        for (var j = 0; j < props.length; j++) {
            if(values.indexOf(str) !== -1) found = true;
            obj[props[j]] = values[j];
        }
        if(found){
            console.log(obj);
            break;
        }
    }
}
var data = 
    "ip,name,desc,mm="+
    "10.49.1.4,server1,Main Server,Fire;"+
    "10.52.5.1,server2,Backup Server,Earth;"+
    "10.,s,Ba,Water";
 
csv_by_name(data, "Water");
csv_by_name(data, "Fire");
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
21.08.2014, 10:48  [ТС]
nubideus, ну, если честно, это было моим тз и я его провалил, затупил. Сегодня проснулся и понял, что зря отошёл от формата тз. Вот вариант на 15 строк.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            function compile_csv_search(text){
                var arrValGroup = text.split(';');
                var arrVar = arrValGroup[0].split(',');
                var arr = new Array, obj;
                for (var i in arrValGroup) {
                    arrVal = arrValGroup[i].split(',');
                    obj = {};
                    for (var i2 = 0; i2 < arrVar.length; i2++) obj[ arrVar[i2] ] = arrVal[i2];
                    arr.push( obj );
                }
                return function(str){ 
                    for(var i2 in arr) for(var prop in arr[i2])
                        if (arr[i2][prop].indexOf(str) != -1) {console.log( arr[i2] );break};
                };
            }
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
21.08.2014, 12:15
Gvizl, а полный текст задания можно?
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
21.08.2014, 12:27  [ТС]
Я уже удалил переписку. Но мой код в общем-то передаёт суть, то бишь нужна функция, которая принимает текст, преобразует его в объекты и возвращает функцию, которая принимает текст, ищет его в объектах и выводит только те из них, у которых есть этот текст.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
21.08.2014, 12:37
Gvizl, а укорачивать вообще надо было?)
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
21.08.2014, 12:39  [ТС]
А, да, забыл сказать. Надо что бы код функции был 10-15 строк максимум. Моя на 19 вышла, сказали, что у меня не тот уровень
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
21.08.2014, 13:01
Цитата Сообщение от Gvizl Посмотреть сообщение
сказали, что у меня не тот уровень
гоняться за размерами кода - это пипец.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
21.08.2014, 14:48
Gvizl,
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function compile_csv_search(a){
    var d=[(a=a.split("="))[0].split(","),a=a[1].split(";")][0];
    for(var e=[],b=0,f;e.push(f={}),b<a.length;b++)
        for(var g=a[b].split(","),c=0;c<d.length;c++)f[d[c]]=g[c];
    return function(str){ 
        for(var i2 in e)
            for(var prop in e[i2])
                if(e[i2][prop].indexOf(str)!=-1){
                    console.log(e[i2]);
                    break;
                };
    };
};
 
var csv_by_name = compile_csv_search(
    "ip,name,desc,mm="+
    "10.49.1.4,server1,Main Server,Fire;"+
    "10.52.5.1,server2,Backup Server,Earth;"+
    "10.,s,Ba,Water"
);
 
csv_by_name("Water");
csv_by_name("Fire");
пропустил через closure compiler, отформатировал, добавил еще финтов.
"d=" - closure выдал 3 строчки, сделал одну одним выражением.
e.push(f) заменил на e.push(f={}).
если не считать фигурные скобки(рекомендуется всегда ставить {}) и пробелы, то форматирование правильное ( http://jsbeautifier.org/ )

Gvizl, не надо тебе к ним, в конкретном случае тебе повезло что не взяли
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
21.08.2014, 14:54  [ТС]
Да, чёт скверно такой код выглядит. Ладно, всем спасибо за внимание, тему можно закрыть(а то я от неё отписываюсь на мейле, но письмо при новых сообщениях всё равно почему-то приходит).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2014, 14:54
Помогаю со студенческими работами здесь

Можно ли сократить код?
Хочу создать форму через js. Есть вариант покороче? var body = document.body, form = document.createElement( 'form' ), input1 =...

Как сократить код?
У меня есть объект Worker и 6 экземпляров этого объекта. Нужно с новой строчки выводить все значения свойств каждого экземпляра. Мой код...

Сократить код раскрывающихся списков
Задача такая. Сделать список типа &quot;Проводник Windows&quot; средством onClick. Данный код работает но не устраивает JS скрипт, в который нужно...

Необходимо сократить код не изменяя HTML
Нужно сильно сократить код, но чтобы функционал не изменился! Прошу помочь! Спасибо. var values = { select_1: { ...

Упростить код
Есть скрипт, его нужно упростить, чтобы было по меньше кода и по легче сделан, помогите пожалуйста. задание: Создать HTML-страницу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru