карта jQuery по сравнению с каждым

Это немного уродливо с Regex, но вот оно:

var str = @"line 1 //comment

line2; test;

extra text; //comment may also contain ;.";

var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);
if (matches.Count > 0)
{
    Console.WriteLine(matches[matches.Count - 1].Groups[1].Index);
}

Мы получаем совпадение для последней точки с запятой в каждой строке (которой не предшествует комментарий), затем мы смотрим на последний из этих матчей.

Мы должны делать это построчно, так как комментарии относятся ко всей строке.

Если вы хотите обрабатывать каждую строку по отдельности (ваш вопрос не говорит об этом, но это подразумевает это), тогда перейдите к matches вместо того, чтобы просто смотреть на последнюю.

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

const string replacement = "#";
var result = Regex.Replace(str, @"^((?:(?<!//).)+);", "$1" + replacement, RegexOptions.Multiline);

Если вы хотите полностью удалить его, просто:

var result = Regex.Replace(str, @"^((?:(?<!//).)+);", "$1", RegexOptions.Multiline);
[1112 ] Если вы просто хотите удалить последнюю точку с запятой во всей строке, вы можете просто использовать string.Remove:

var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);
if (matches.Count > 0)
{
    str = str.Remove(matches[matches.Count - 1].Groups[1].Index, 1);
}
233
задан bendewey 14 April 2009 в 14:10
поделиться

4 ответа

The each method is meant to be an immutable iterator, where as the map method can be used as an iterator, but is really meant to manipulate the supplied array and return a new array.

Another important thing to note is that the each function returns the original array while the map function returns a new array. If you overuse the return value of the map function you can potentially waste a lot of memory.

For example:

var items = [1,2,3,4];

$.each(items, function() {
  alert('this is ' + this);
});

var newItems = $.map(items, function(i) {
  return i + 1;
});
// newItems is [2,3,4,5]

You can also use the map function to remove an item from an array. For example:

var items = [0,1,2,3,4,5,6,7,8,9];

var itemsLessThanEqualFive = $.map(items, function(i) {
  // removes all items > 5
  if (i > 5) 
    return null;
  return i;
});
// itemsLessThanEqualFive = [0,1,2,3,4,5]

You'll also note that the this is not mapped in the map function. You will have to supply the first parameter in the callback (eg we used i above). Ironically, the callback arguments used in the each method are the reverse of the callback arguments in the map function so be careful.

map(arr, function(elem, index) {});
// versus 
each(arr, function(index, elem) {});
263
ответ дан 23 November 2019 в 03:32
поделиться

1: Аргументы функций обратного вызова обращены.

.each () , $. Each () , и .map () [ Функция обратного вызова 126] сначала берет индекс, а затем обратный вызов элемента

function (index, element) 

$. Map () имеет те же аргументы, но обратные

function (element, index)

2: .each () , $. Each () и .map () делают что-то особенное с , этот

each () вызывает функцию таким образом, что this указывает на текущий элемент. В большинстве случаев вам даже не нужны два аргумента в функции обратного вызова.

function shout() { alert(this + '!') }

result = $.each(['lions', 'tigers', 'bears'], shout)

// result == ['lions', 'tigers', 'bears']

Для $. Map () переменная this ссылается на объект глобального окна.

3: map () делает что-то особенное с возвращаемым значением обратного вызова

map () вызывает функцию для каждого элемента, и сохраняет результат в новом массиве, который он возвращает. Обычно вам нужно использовать только первый аргумент в функции обратного вызова.

function shout(el) { return el + '!' }

result = $.map(['lions', 'tigers', 'bears'], shout)

// result == ['lions!', 'tigers!', 'bears!']
93
ответ дан Patrick McElhaney 23 November 2019 в 03:32
поделиться

Jquery.map имеет больше смысла, когда вы работаете с массивами, поскольку он очень хорошо работает с массивами.

Jquery.each лучше всего использовать при итерации по селектор предметов. Что подтверждается тем, что функция карты не использует селектор.

$(selector).each(...)

$.map(arr....)

как видите,

-1
ответ дан Jeremy B. 23 November 2019 в 03:32
поделиться

Функция каждая выполняет итерацию по массиву, вызывая предоставленную функцию один раз для каждого элемента и установка этого на активный элемент. Это:

function countdown() {
    alert(this + "..");
}

$([5, 4, 3, 2, 1]).each(countdown);

оповестит 5 .. затем 4 .. затем 3 .. затем 2 .. затем 1 ..

Map, с другой стороны, берет массив и возвращает новый массив с каждым элементом, измененным функцией. Это:

function squared() {
    return this * this;
}

var s = $([5, 4, 3, 2, 1]).map(squared);

приведет к тому, что s будет [25, 16, 9, 4, 1] .

С другой стороны, Map берет массив и возвращает новый массив, каждый элемент которого изменяется функцией. Это:

function squared() {
    return this * this;
}

var s = $([5, 4, 3, 2, 1]).map(squared);

приведет к тому, что s будет [25, 16, 9, 4, 1] .

С другой стороны, Map берет массив и возвращает новый массив, каждый элемент которого изменяется функцией. Это:

function squared() {
    return this * this;
}

var s = $([5, 4, 3, 2, 1]).map(squared);

приведет к тому, что s будет [25, 16, 9, 4, 1] .

22
ответ дан Magnar 23 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: