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

Поясните за replace: Программа должен находить все числа в строке и прибавлять к ним 10

16.08.2013, 22:14. Показов 887. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Снова я к Вам за помощью. Имеется листинг, являющийся примером использования метода replace в случае, когда вторым его параметром является ссылка на функцию и, по идее, программа должен находить все числа в строке и прибавлять к ним 10
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>функция</title>  
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<script type="text/javascript">
<!--
var p = new RegExp("[0-9] ([0-9+])", "g");
var Str = "2000, 2001, 2002, 2003, 2004";
Str = Str.replace(p, function(s, x) {
    document.write(x + ", ");
    var n = parseInt(s);
    n += 10;
    return n + " ";
});
document.write("<br>" + Str);
//-->
</script>
</body>
</html>
Хотя листинг и взят из учебника, судя по всему, он неправилен, т.к. желаемая строка с прибавленной к числам десяткой (2010, 2011, 2012, 2013, 2014) не выводится. Как все таки реализовать эту задачу? Приведите доступные примеры использования replace с аргументом функцией. Буду благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2013, 22:14
Ответы с готовыми решениями:

Если минимальный элемент стоит в первой строке, то все элементы, стоящие в строке за ним, заменить нулями
Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы, стоящие в...

Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы, стоящие в строке за ним, заменить нулями.
Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы, стоящие в...

Как переделать триггер? Он должен прибавлять скидку к клубной карте туриста после каждого третьего похода
CREATE OR REPLACE TRIGGER Dicsount AFTER INSERT ON Payment FOR EACH ROW DECLARE counter...

Составить программу, которая будет находить в массиве все положительные числа и считать их количество
Составить программу, которая будет находить в массиве все положительные числа и считать их...

7
128 / 125 / 39
Регистрация: 11.04.2010
Сообщений: 255
17.08.2013, 04:54 2
Например, так

Javascript
1
2
3
4
5
6
7
var reg = /\d+/g;
 
var Str = "2000, 2001, 2002, 2003, 2004";
 
Str = Str.replace(reg, function(a){ return a*1+10 } );
 
document.write("<br>" + Str);
1
2 / 2 / 0
Регистрация: 06.06.2013
Сообщений: 73
17.08.2013, 11:00  [ТС] 3
Цитата Сообщение от Alexdemath Посмотреть сообщение
Например, так
О, работает, спасибо! Все компактно и логично, а зачем же в листинге что я приводил так понагородили?
Единственное, не совсем понял смысл умножения а на 1 ("return a*1+10"). Разъясните пожалуйста.

И еще. Имеет ли значение какими символами разделены числа в строке. Т.е., например, если бы строка имела вид:
var Str = "2000 2001 2002 2003 2004"
или
var Str = "2000 * 2001- 2002 2003. 2004"
результат был бы аналогичный?
0
128 / 125 / 39
Регистрация: 11.04.2010
Сообщений: 255
17.08.2013, 13:45 4
Цитата Сообщение от polnyj0 Посмотреть сообщение
Единственное, не совсем понял смысл умножения а на 1 ("return a*1+10"). Разъясните пожалуйста.
Для преобразование строки в число, чтобы 10 прибавлялась к числам, а не конкатенировалась.

Цитата Сообщение от polnyj0 Посмотреть сообщение
И еще. Имеет ли значение какими символами разделены числа в строке. Т.е., например, если бы строка имела вид:
var Str = "2000 2001 2002 2003 2004"
или
var Str = "2000 * 2001- 2002 2003. 2004"
результат был бы аналогичный?
Не имеет.
В первом случая получите "2010 2011 2012 2013 2014", во втором - "2010 * 2011- 2012 2013. 2014".
1
256 / 234 / 38
Регистрация: 31.10.2010
Сообщений: 504
17.08.2013, 13:46 5
Цитата Сообщение от polnyj0 Посмотреть сообщение
Единственное, не совсем понял смысл умножения а на 1
a - строка, если к строке "2008" прибавить 10, то получится строка "200810". В данном случае умножение используется для того, чтобы привести переменную к числовому типу.
Цитата Сообщение от polnyj0 Посмотреть сообщение
Имеет ли значение какими символами разделены числа в строке
В данном случае - нет.

Не по теме:

UPD: Опоздал... опять.

1
Эксперт JSЭксперт HTML/CSS
2435 / 1114 / 312
Регистрация: 23.06.2011
Сообщений: 3,525
17.08.2013, 21:29 6
Цитата Сообщение от Good-bad man Посмотреть сообщение
UPD: Опоздал... опять.
Нужно было раньше выходить из дома....

исходник
Javascript
1
{ return a*1+10 }
или так, хотя это еще менее понятней, плюс перед переменной называется унарный плюс, он тоже перегоняет строку в число
Javascript
1
{ return +a+10 }
или совсем извращенно
Javascript
1
{ return parseInt(a)+10 }
или такое извращение, тут при вычитании переменная автоматом перегоняется в число
Javascript
1
{ return a-0+10 }
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
18.08.2013, 08:35 7
"совсем извращение", однако, в большинстве браузеров исполняется быстрее всего
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var Time0 = new Date;
for (var j = 0; j < 987654; j++) var a = '1', b = a * 1 + 10;
 
var Time1 = new Date;
for (var j = 0; j < 987654; j++) var a = '1', b = +a + 10;
 
var Time2 = new Date;
for (var j = 0; j < 987654; j++) var a = '1', b = parseInt (a) + 10;
 
var Time3 = new Date;
for (var j = 0; j < 987654; j++) var a = '1', b = a - 0 + 10;
 
var Time4 = new Date;
 
var txt  = '<table cellspacing="0" cellpadding="5" border>';
    txt += '<tr><td>*1</td><td>'       + (Time1 - Time0) + '</td></tr>';
    txt += '<tr><td>+</td><td>'        + (Time2 - Time1) + '</td></tr>';
    txt += '<tr><td>parseInt</td><td>' + (Time3 - Time2) + '</td></tr>';
    txt += '<tr><td>-0</td><td>'       + (Time4 - Time3) + '</td></tr></table>';
document.write (txt);
1
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
22.08.2013, 13:41 8
Цитата Сообщение от kalabuni Посмотреть сообщение
"совсем извращение", однако, в большинстве браузеров исполняется быстрее всего
Не знаю, в каких браузерах ты измерял, у меня оно выполняется дольше всего.

Опера:
Код
*1       1068
+        1009
parseInt 1919
-0       993
Хром:
Код
*1       1697
+        1690
parseInt 1861
-0       1621
1
22.08.2013, 13:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2013, 13:41
Помогаю со студенческими работами здесь

Найти все натуральные числа, меньшие заданного числа и взаимно простые с ним
Дано натуральное число n. Необходимо получить все натуральные числа, меньшие nn и взаимно простые с...

Для заданного натурального числа найти все числа меньше его и взаимно простые с ним
Помогите написать код: для заданного с клавиатуры натурального числа N найти все числа меньше...

Составить функцию, которая будет находить следующее за ним простое число
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число.

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

Составить процедуру, которая будет находить за ним следующее простое число
Начальная задача звучит так: Дано простое число, составить функцию, которая будет находить за ним...

Составить функцию, которая будет находить следующее за ним простое число
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число. ...


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

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