Javascript удалить до первой точки

Удалить символ в определенной позиции в строке — javascript [duplicate]

Есть ли простой способ удалить символ в определенной позиции в javascript? например. если у меня есть строка «Hello World» , могу ли я удалить символ в позиции 3? результат, который я бы искал, будет следующим:

Этот вопрос не является дубликатом Javascript — удаляет символ из строки, beucase — это удаление символа в определенной позиции, и thta вопрос об удалении всех экземпляров символа.

Вы даже искали ответ, прежде чем опубликовать этот вопрос? Если бы вы задумали «Javascript string delete symbol», вы бы наткнулись здесь как минимум на 4 других вопроса, не говоря уже о фактическом решении около миллиона раз.

Это не дубликат. Этот вопрос касается удаления известного персонажа из определенной позиции. Дубликат предназначен для удаления известного персонажа из произвольной позиции.

@MT0 MT0 Нет. Этот вопрос касается удаления символа по определенному индексу, а этот вопрос касается удаления экземпляров определенного символа из строки.

@starbeamrainbowlabs Нет, это точная копия; связанный вопрос касается удаления 4-го символа (который также всегда будет r ). Принятый ответ здесь идентичен второму наиболее высоко оцененному ответу на этот вопрос.

8 ответов

Это зависит от того, насколько легко вы найдете следующее, которое использует простые методы String (в данном случае slice() ).

var str = "Hello World"; str = str.slice(0, 3) + str.slice(4); 

@Zon: Точно, и это идея. В сочетании с + str.slice(4); в итоге вы удаляете третий символ (с нулевым индексом) в строке str . str.slice(0, 3) + str.slice(4) // Helo World

Читайте также:  Html язык программирования плюсы

Просто, чтобы поставить мой доллар: str.slice (0, 3) дает «Хел» (взять с 1-го по 3-й символ); str.slice (4) дает «o World» (взять все после 4-го символа); Вы также можете установить границы обрезки следующим образом: str.slice (0, -6), чтобы получить «Hello».

Вы можете попробовать это так!

var str ="Hello World"; var position = 6;//its 1 based var newStr = str.substring(0,position - 1) + str.substring(postion, str.length); alert(newStr); 

@GeorgeSiggouroglou Спасибо за указание, фактически переменная позиции основана на 1 (я прокомментировал 0). Просто исправил комментарий.

Если вы опустите первый параметр, метод вырезает остальную часть строки:

var str = ",Apple, Banana, Kiwi"; str.slice(1) // to remove first index character Output: "Apple, Banana, Kiwi" 

Если вы опустите конкретный символ индекса, используйте

var str ="Hello world" , index=3; str = str.slice(0,index-1) + str.slice(index); Output: "Helo world" 
 var str = 'Hello World'; str = setCharAt(str, 3, ''); alert(str); function setCharAt(str, index, chr) < if (index >str.length - 1) return str; return str.substr(0, index) + chr + str.substr(index + 1); > 

вы можете использовать метод substring() . ех,

var x = "Hello world" var x = x.substring(0, i) + 'h' + x.substring(i+1); 

Поверните строку в массив, вырежьте символ по указанному индексу и вернитесь к строке

let index = 3 let str = 'Hello World'.split('') str.splice(index, 1) str = str.join('') 

Вы можете сделать это со следующим:

var oldValue = "pic quality, hello" ; var newValue = "hello"; var oldValueLength = oldValue.length ; var newValueLength = newValue.length ; var from = oldValue.search(newValue) ; var to = from + newValueLength ; var nes = oldValue.substr(0,from) + oldValue.substr(to,oldValueLength); console.log(nes); 

Я тестировал это на своей javascript-консоли, чтобы вы могли это проверить Благодаря

Источник

Как найти все символы после точки?

duboloms

Ничего в консоли не пишет даже
Изменено:
Работает! просто я там кое чо написал не правильно. а еще надо было 0 на 1 изменить. спасибо большое!

Дуболом Одноклеточный, не совсем поняла. Почему 0 на 1? Если надо оставить ДО первой точки, то 0, если между первой точкой и второй, то 1, если между второй и третьей, то 2 и т.д. А если надо найти все ПОСЛЕ последней точки, то вот:

let text = 'test.test1111.test123.test555'; let dotCnt = (text.match(/\./g) || []).length; console.log(text.split('.')[dotCnt]);
let text = 'test.test1111.test123.test555'; const p = text.lastIndexOf('.'); const result = p === -1 ? text : text.slice(p+1, text.lenght); console.log(result);

bingo347

Пожалуй пора писать статью на хабр о вредности RegExp. Ваше непонимание, что происходит в простейшей регулярке, лишь доказывает это. А Вам, как и многим другим до Вас отвечу, что Вам не нужен RegExp, ибо это очень дорого, как в вычислении, так и в поддержке.

const p = text.indexOf('.'); const result = p === -1 ? text : text.slice(0, p); console.log(result);

Данная регулярка найдет первую точку, сразу за которой следует заглавная латинская буква и вырежет только конкретно это сочетание, что совсем не соответствует заданному вопросу.

Как определить, в каких случаях можно RegExp, а в каких лучше без него? Или если можно без него, лучше без.
И как сравнить производительность моего и Вашего варианта?

bingo347

LissaAlbatross, в подавляющем большинстве случаев люди пользуются RegExp или от лени или от неумения сделать нормально, абсолютно при это не думая, как это нечитаемое нечто будут поддерживать коллеги или они сами спустя неделю, не говоря уже о том, что о производительности вообще мало кто думает (может это и к лучшему, пока я не перешагнул через пол ляма в месяц, я этому даже рад). Но в целом RegExp под капотом — это конечный автомат со сложностью в худшем случае O(n 2 ), помимо того регулярку необходимо скомпилировать, что тоже не бесплатно.

Насчет split, его минус в том, что он будет всегда искать до конца строки, тогда как indexOf остановит поиск если нашел искомую подстроку. Кроме того split отрежет от исходной строки столько кусков, сколько найдет. В общем под капотом у него мой пример, только в цикле.
Ну и Вы конечно забыли, что у split есть параметр limit, позволяющий ограничить количество поисков. text.split(‘.’, 1)[0] всего одна циферка, но будет в разы быстрее

Дмитрий Беляев, про то, что RegExp — конечный автомат не знала. Посоветуйте, пожалуйста, что почитать про javascript «под капотом» :)?
indexOf и slice это O(n)?

let text = 'test.test1111.test123.test555'; const p = text.lastIndexOf('.'); const result = p === -1 ? text : text.slice(p+1, text.lenght); console.log(result);

переписала тут свой код (это если «найти все символы после точки» и 1 вместо 0, как сказал автор). Вашим способом удобнее и самой понятнее))) Спасибо за интересный ответ.
UPD: Что-то с выравниванием кода не то, извините.

bingo347

LissaAlbatross, я большую часть о подкапотном устройстве черпаю от сюда https://github.com/v8/v8
При том, что у меня весьма поверхностные познания в плюсах, мое знание C + высокое качество кода v8 вполне позволяют разбираться, что там происходит, хотя в последнее время они все больше прибегают к кодогенерации, что затрудняет обновление познаний.

В частности по регекспам, вот Вам конечный автомат управляемый скомпилированной регуляркой: https://github.com/v8/v8/blob/master/src/regexp/re.

bingo347

LissaAlbatross, в нотации O-большое считают худший случай
indexOf — это линейный поиск, так что да, это O(n)
насчет slice не уверен, потенциально он может как просто сделать ссылку на часть исходной строки (так как строки в js не изменяемы, это вполне валидно) — это будет O(1), но так же может быть и копирование — O(n)
Надо поискать, как реализовано в v8

Источник

Как удалить элемент из массива в JavaScript

Подпишись на наш канал с тестами по HTML/CSS/JS в Telegram!

Перевод статьи «Remove element from an array».

Удалить один или большее число элементов из уже существующего массива — распространенная задача в программировании. В JavaScript есть несколько вариантов ее решения, от простых до более сложных. Выбор подходящего решения зависит от ваших нужд. Нужно ли вам решение, изменяющее исходный массив? Надо ли удалить элемент по значению или по индексу? Нужно убрать один или несколько элементов? В общем, давайте посмотрим, какие у нас есть варианты.

Удаление любого элемента при помощи метода filter

Метод filter() — самое универсальное решение. С его помощью можно удалить как один, так и несколько элементов, причем хоть по значению, хоть по индексу. Это неизменяемое решение. С его помощью, собственно, не элемент удаляется, а создается новый массив, из которого отфильтровываются нежелательные элементы. Этот метод широко поддерживается, даже в Internet Explorer. Совместимость можно проверить здесь.

Метод filter() принимает в качестве параметра функцию обратного вызова, которая будет вызываться со следующими аргументами:

  1. Значение (value) элемента (этот аргумент обязательный).
  2. Индекс (index) элемента — опционально.
  3. Исходный массив — тоже опционален.

Результирующий массив будет содержать элементы, для которых возвращаемое значение callback-функции будет истинным.

let originalArray = [1, 2, 3, 4, 5]; let filteredArray = originalArray.filter(myFilter); function myFilter(value) < return value < 3 || value >4; >

Метод filter() можно применять в компактном виде — с использованием стрелочных функций. Это можно делать, если для вас не важна поддержка IE.

let originalArray = [1, 2, 3, 4, 5]; let filteredArray = originalArray.filter((value, index) => index !== 2);

Удаление конкретного объекта

Даже если ваш массив содержит объекты, а не базовые типы данных, метод filter() все равно сработает. Просто нужно определить callback-функцию соответствующим образом.

let originalArray = [ , , ]; let filteredArray = originalArray.filter(value => value.age > 18);

Удаление первого элемента

Пожалуй, самый простой вариант удаления элемента из массива — удаление первого элемента. Для примера можно взять FIFO-очередь. В этом случае для удаления первого элемента можно воспользоваться методом shift(). Этот метод возвращает удаленный элемент, так что вы сможете как-то его обработать при желании. В отличие от filter(), метод shift() изменяет исходный массив.

let myArray = [1, 2, 3, 4, 5]; let removedElement = myArray.shift();

Удаление последнего элемента

Очень похожий вариант, только для случаев удаления элемента из LIFO-стека. Для удаления последнего элемента массива можно использовать метод pop(). Работает он аналогично методу shift(), который мы разбирали в предыдущем разделе.

let myArray = [1, 2, 3, 4, 5]; let removedElement = myArray.pop(); // myArray: 1,2,3,4

Удаление конкретного элемента по индексу

Если вы хотите удалить из массива какой-то определенный элемент, можно воспользоваться методом splice(). Этот метод умеет не только удалять элементы, но и добавлять новые.

При помощи метода splice() можно удалить и больше одного элемента за раз. Для этого в качестве первого параметра укажите начальный индекс. Вторым параметром идет число элементов, которые вы хотите удалить. Этот второй параметр опционален. Если вы его не укажете, метод удалит указанный в первом параметре элемент, а также все элементы справа от него.

// splice(2) example let myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2); console.log("After splice(2): " + myArray); // splice(2, 1) example myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2, 1); console.log("After splice(2, 1): " + myArray); // splice(2, 2) example myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2, 2); console.log("After splice(2, 2): " + myArray);

Поскольку метод splice() использует индексы массива, если вы захотите удалить элемент по значению, сначала придется найти его индекс.

Использование delete

Использование метода delete может быть очевидным, но он работает не так, как вы, вероятно, ожидаете. Он не удаляет элемент, а стирает его значение. Длина массива останется той же, а на позиции, которую вы очистили, будет неопределенное значение.

let myArray = [1, 2, 3, 4, 5]; delete(myArray[2]); // Result: 1,2,,4,5

Источник

Оцените статью