Встраивание javascript в Power Query через функцию Web.Page
Содержание задачи:
- a = "100,500,0,0,2000,0,1000" ; - строка
- b = 1000; - число
- delim = " , " ;
- Найти: result (т.е. в переменной result должна получиться после вычислений новая строка "0,0,0,0,1600,0,1000")
алгоритм решения простыми словами:
- переменную а преобразую в массив arr (переменная delim используется в преобразовании);
- создаю новый массив newarr, куда будут добавляться новые значения;
- от значения переменной b (1000) вычитаю первый элемент массива arr, получается 900 (положительная разность), поэтому значение первого элемента массива newarr равно 0, значение переменной b равно 900;
- от значения переменной b (900) вычитаю второй элемент массива arr, получается 400 (положительная разность), поэтому значение второго элемента массива newarr равно 0,значение переменной b равно 400;
- в результате вычислений с третьим и четвертым элементом массива arr получаем значения равные 0 (т.е. без изменений);
- пятый элемент массива newarr получает абсолютное значение 1600,значение переменной b равно о и вычисления прерываются;
- провожу конкатенацию массивов: newarr и arr (шестого и седьмого элемента)
Но я не могу увидеть результат в Power Query. При разворачивании таблицы отсутствует элемент BODY. В чем причина его отсутствия? 
**
let fx=(a as text, b, delim as text)=>
Web.Page(
"<script>
var x = '"& a &"';
var y = '"& Text.From(b) &"';
var z = '"& delim &"';
var arr = x.split(z);
var arrnew = [];
if (y > 0) {
for (let i of arr) {
if ((y-i) < 0) {
i = -(y-i);
arrnew.push(i);
break;
}
y = y-i;
i = 0;
arrnew.push(i);
}
}
arr.splice(0, arrnew.length);
var result = arrnew.concat(arr).join(z);
document.write(result);
</script>")
in
fx
**
Ответы (1 шт):
Автор решения: Светлана
→ Ссылка
Вопрос решен. Использовала цикл for(..;..;..), вместо for..of
let
fx=(a as text, b as number, delim as text)=>
Web.Page(
"<script>
x = '"& Text.From (a) &"';
y = '"& Text.From (b) &"';
z = '"& Text.From (delim) &"';
arr = x.split(z);
arrnew = [];
if (y > 0) {
for (i = 0; i < arr.length; i++) {
if ((y-arr[i]) < 0) {
arr[i] = -(y-arr[i]);
arrnew.push(arr[i]);
break;
}
y = y-arr[i];
arr[i] = 0;
arrnew.push(arr[i]);
}
}
arr.splice(0, arrnew.length);
result = arrnew.concat(arr).join(z);
document.write(result);
</script>")
in
fx