Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2021, 10:15
Интересующийся
Отправить личное сообщение для Storm03 Посмотреть профиль Найти все сообщения от Storm03
 
Регистрация: 20.02.2021
Сообщений: 12

replace() по шаблону
С сервера для работы приходит некий массив в виде строки для работы на фронте:
var goods_arr = "Z0000001557;Z0000001536;";

Для удаления элемента в функции использовался replace:
goods_arr = goods_arr.replace(s+";", "");

где s - это код товара.
В зависимости от контекста goods_arr может приходить и в другом виде:
var goods_arr = "UT000018375@5@12;UT000020474@1@150;UT000026718@20@58;Z0000001404@10@456;"

Конечно, можно теперь удаление обрабатывать через split() - forEach() - join(), но это как-то не изящно...
Есть ли какой-нибудь способ сделать replace что-то типа replace(s+"*;", "")?
Ответить с цитированием
  #2 (permalink)  
Старый 16.10.2021, 10:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Есть, но это некрасиво и чревато.
Лучше таки делать split и хранить в виде массива. Удалять тоже из массива.
А собирать обратно в строку только когда это действительно понадобится.
Это надёжно и явно.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2021, 10:33
Интересующийся
Отправить личное сообщение для Storm03 Посмотреть профиль Найти все сообщения от Storm03
 
Регистрация: 20.02.2021
Сообщений: 12

Сообщение от Aetae Посмотреть сообщение
Это надёжно и явно.
Понятно. Спасибо)))
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2021, 11:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Storm03
Конечно, можно теперь удаление обрабатывать через split() - forEach() - join(), но это как-то не изящно...
Помимо replace у строк есть еще и другие методы.
https://javascript.ru/string/indexof
https://javascript.ru/String/substring

Сообщение от Storm03
Есть ли какой-нибудь способ сделать replace что-то типа replace(s+"*;", "")?
Не совсем понял что именно ты хочешь сделать?
Ведь в переменной s у тебя искомое значение... Зачем тебе там символ *?
Ответить с цитированием
  #5 (permalink)  
Старый 16.10.2021, 11:58
Интересующийся
Отправить личное сообщение для Storm03 Посмотреть профиль Найти все сообщения от Storm03
 
Регистрация: 20.02.2021
Сообщений: 12

Сообщение от ksa Посмотреть сообщение
Ведь в переменной s у тебя искомое значение... Зачем тебе там символ *?
В s не искомое значение, а только код товара. А количество и цену тогда придётся "выцарапывать" из goods_arr, чтобы собрать полностью искомое значение.

Последний раз редактировалось Storm03, 16.10.2021 в 13:31.
Ответить с цитированием
  #6 (permalink)  
Старый 16.10.2021, 12:10
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,692

А что такое код товара?

"UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;"

Что код товара "UT000018375", "Z0000001404" или "000018375" "0000001404"?
Ответить с цитированием
  #7 (permalink)  
Старый 16.10.2021, 12:13
Интересующийся
Отправить личное сообщение для Storm03 Посмотреть профиль Найти все сообщения от Storm03
 
Регистрация: 20.02.2021
Сообщений: 12

В результате получилось:
let arr = u.value.split(";");
arr = arr.filter(item => !item.includes(s));
u.value = arr.join(";");

В принципе, меня устраивает.
Ответить с цитированием
  #8 (permalink)  
Старый 16.10.2021, 12:17
Интересующийся
Отправить личное сообщение для Storm03 Посмотреть профиль Найти все сообщения от Storm03
 
Регистрация: 20.02.2021
Сообщений: 12

Сообщение от voraa Посмотреть сообщение
А что такое код товара?

"UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;"

Что код товара "UT000018375", "Z0000001404" или "000018375" "0000001404"?
Там двумерный массив:
Код_товара@количество@Цена; Код_товара@количество@Цена; Код_товара@количество@Цена;
И, когда удаляешь товар из таблицы, этот массив изменяется, строка из таблицы убирается.

Последний раз редактировалось Storm03, 16.10.2021 в 12:28.
Ответить с цитированием
  #9 (permalink)  
Старый 16.10.2021, 12:34
Интересующийся
Отправить личное сообщение для Storm03 Посмотреть профиль Найти все сообщения от Storm03
 
Регистрация: 20.02.2021
Сообщений: 12

Сообщение от Aetae Посмотреть сообщение
А собирать обратно в строку только когда это действительно понадобится.
Знаменитый анекдот, как программист кипятит чайник)))
1. Налить воды в чайник;
2. Зажечь газ;
3. Поставить чайник на газ.
А если в чайнике уже есть вода и газ включен?
Вылить воду из чайника, погасить газ и перейти к п.1.
Ответить с цитированием
  #10 (permalink)  
Старый 17.10.2021, 20:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Storm03
как программист кипятит чайник
Не программист, а математик...

Сообщение от Storm03
Там двумерный массив:
Код_товара@количество@Цена; Код_товара@количество@Цена; Код_товара@количество@Цена;
Тогда, как вариант...
const str = "UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;"
const re = new RegExp('UT000020474' + '[^;]+?;')
alert(str.replace(re, ''))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Replace - очиска от стоп слов Sverhchelovek Ваши сайты и скрипты 13 22.03.2015 20:11
Дублирование записи и несработка replace kilogram Серверные языки и технологии 6 02.07.2012 21:00
Метод replace cyber Events/DOM/Window 20 07.05.2012 00:38
Помогите с replace! faforty Общие вопросы Javascript 2 28.08.2011 13:10
replace и ie и jquery FenixGnom jQuery 3 12.04.2011 08:40