8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 464
1

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2014, 14:54
Ответы с готовыми решениями:

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

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

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

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

16
qm
25 / 24 / 7
Регистрация: 15.08.2014
Сообщений: 60
20.08.2014, 15:23 2
Предлагаю избавиться от комментариев, они тут ни к чему.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 16:05 3
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
Сообщений: 464
20.08.2014, 20:52  [ТС] 4
А можно ли ещё меньше кода сделать?
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 21:14 5
Gvizl, короче будет только в ущерб производительности и читаемости
1
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.08.2014, 21:17 6
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 7
BANO, что это за бред? это даже не минимизер

для сжатия есть closure compiler
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.08.2014, 21:25 8
nubideus, извените не разбераюся
для меня он непонятнее стал я и подумал что короче
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
20.08.2014, 21:31 9
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
Сообщений: 464
21.08.2014, 10:48  [ТС] 10
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 11
Gvizl, а полный текст задания можно?
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 464
21.08.2014, 12:27  [ТС] 12
Я уже удалил переписку. Но мой код в общем-то передаёт суть, то бишь нужна функция, которая принимает текст, преобразует его в объекты и возвращает функцию, которая принимает текст, ищет его в объектах и выводит только те из них, у которых есть этот текст.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
21.08.2014, 12:37 13
Gvizl, а укорачивать вообще надо было?)
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 464
21.08.2014, 12:39  [ТС] 14
А, да, забыл сказать. Надо что бы код функции был 10-15 строк максимум. Моя на 19 вышла, сказали, что у меня не тот уровень
0
Модератор
Эксперт JS
5197 / 2079 / 406
Регистрация: 06.01.2013
Сообщений: 4,793
21.08.2014, 13:01 15
Цитата Сообщение от Gvizl Посмотреть сообщение
сказали, что у меня не тот уровень
гоняться за размерами кода - это пипец.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
21.08.2014, 14:48 16
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
Сообщений: 464
21.08.2014, 14:54  [ТС] 17
Да, чёт скверно такой код выглядит. Ладно, всем спасибо за внимание, тему можно закрыть(а то я от неё отписываюсь на мейле, но письмо при новых сообщениях всё равно почему-то приходит).
0
21.08.2014, 14:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2014, 14:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru