Привет, парень может помочь вам
$.each($("[name=amounter]"), function (index, data) {
console.log($("[name=amounter]:eq("+index+")").val());
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Amount1</label>
<div class="col-md-10">
<input type="text" name="amounter" id="amounter_@1" required value="data1" />
</div>
<label>Amount2</label>
<div class="col-md-10">
<input type="text" name="amounter" id="amounter_@2" required value="data2" />
</div>
<label>Amount3</label>
<div class="col-md-10">
<input type="text" name="amounter" id="amounter_@3" required value="data3"/>
</div>
Вот решение dplyr, которое примерно в 20 раз быстрее и дает те же результаты. Я предполагаю, что аналог data.table будет еще быстрее. (РЕДАКТИРОВАТЬ: см. Снизу - это так!)
Ускорение происходит за счет уменьшения количества сравнений, которые необходимо выполнить. Наибольшее различие всегда будет найдено по отношению к наибольшему оставшемуся числу в группе, поэтому быстрее сначала идентифицировать это число и выполнить только одно вычитание на строку.
Во-первых, исходное решение на моей машине занимает около 4 секунд:
tictoc::tic("OP data.table")
dt[, max_diff := vapply(1:.N, function(x) max(X[x:.N] - X[x]), numeric(1)), by = Y]
tictoc::toc()
# OP data.table: 4.594 sec elapsed
Но всего за 0,2 секунды мы можем взять эту таблицу данных, преобразовать ее во фрейм данных, добавить строку orig_row
число, сгруппировать по Y, обратная сортировка по orig_row
, взять разницу между X и кумулятивным максимумом X, разгруппировать и перегруппировать в исходном порядке:
library(dplyr)
tictoc::tic("dplyr")
dt2 <- dt %>%
as_data_frame() %>%
mutate(orig_row = row_number()) %>%
group_by(Y) %>%
arrange(-orig_row) %>%
mutate(max_diff2 = cummax(X) - X) %>%
ungroup() %>%
arrange(orig_row)
tictoc::toc()
# dplyr: 0.166 sec elapsed
all.equal(dt2$max_diff, dt2$max_diff2)
#[1] TRUE
РЕДАКТИРОВАТЬ: как предлагает @ david-arenburg в комментариях это можно сделать молниеносно в data.table с помощью элегантной строки:
dt[.N:1, max_diff2 := cummax(X) - X, by = Y]
На моем компьютере это примерно в 2-4 раза быстрее, чем решение dplyr
выше.