function maxZeroSequence(arr) {
let iMin = 0;
let iMax = 0;
for (let i = 0; i < arr.length; i++) {
let sum = 0;
for (let j = i; j < arr.length; j++) {
if ((sum += arr[j]) === 0 && (iMax - iMin) <= (j - i + 1)) {
iMin = i;
iMax = j + 1;
}
}
}
return arr.slice(iMin, iMax);
}
function maxZeroSequence(arr) {
const sumIndices = Object.values(arr.reduce((acc, n, i) => {
const sum = acc[0] += n;
(acc[1][sum] = acc[1][sum] || [ i + 1 ])[1] = i + 1;
return acc;
}, [ 0, { 0: [ 0 ] } ])[1]);
return arr.slice(...sumIndices.reduce((max, n) => {
const diff1 = n[1] - n[0];
const diff2 = max[1] - max[0];
return diff1 > diff2 || (diff1 === diff2 && n[0] > max[0]) ? n : max;
}, [ 0, 0 ]));
}
const cities = [ 'Москва', 'Санкт-Петербург', 'Севастополь' ];
if (cities.includes(geolocation.city)) {
...
Name должна падать в массив labels
watch: {
choosenMetabolit(val) {
this.anMetProfData.labels.push(val.name);
},
},
а result_1, 2 и 3 имели путь datasets[0, 1 или 2]. data
watch: {
choosenMetabolit(val) {
const data = this.anMetProfData;
const sets = data.datasets;
data.labels.push(val.name);
sets[0].data.push(val.result_1);
sets[1].data.push(val.result_2);
sets[2].data.push(val.result_3);
},
},
NavLink
в Nav
(кстати, а что там после этого останется? - да ничего, кроме рендеринга a
, которому прокидываются props без изменений; получается, что не так уж и нужен этот компонент, проще создавать этот a
сразу в Nav
), и хранить в нём индекс активного элемента:state = {
active: null,
...
}
setActive(active) {
this.setState({ active });
}
{this.state.items.map((n, i) => (
<li>
<NavLink
href="#"
className={this.state.active === i ? 'active' : ''}
onClick={() => this.setActive(i)}
>
{n}
</NavLink>
</li>
))}
<div class="slider-wrapper">
<button data-step="-1">-</button>
<div class="slider"></div>
<button data-step="+1">+</button>
</div>
$('.slider').slider({ /* настройки слайдера */ });
$('.slider-wrapper [data-step]').button().click(function() {
const $slider = $(this).closest('.slider-wrapper').find('.ui-slider');
const step = +this.dataset.step;
const { min, max, value } = $slider.slider('option');
$slider.slider('option', 'value', Math.max(min, Math.min(max, +value + step)));
});
el: '.slidernav'
el: this.querySelector('.slidernav')
SELECT key, array_agg(val)
FROM (
SELECT key::integer, jsonb_array_elements_text(value)::boolean AS val
FROM jsonb_each('{"659": [false, false, false], "596": [true, true, true]}'::jsonb)
) AS t
GROUP BY key
const add = (str, num, saveLength) =>
`${+str + num}`.padStart(str.length, 0).slice(-str.length * !!saveLength);
add('0001', 1) // '0002'
add('000099', 901) // '001000'
add('05', 99) // '104'
add('05', 99, true) // '04'
19
, или true
, или '!!!!!'
, или... у вас же в операторе switch отсутствует ветка default - и вы ещё спрашиваете, откуда берётся undefined.case 1: return outtype = 'a'; break;
const getType = (type) => ({
1: 'a',
2: 's',
3: 'f',
})[parseInt(type, 10)] || /* а здесь должно быть дефолтное значение */
function validateInput($input, regex) {
const result = regex.test($input.val());
$input
.closest('.form-group')
.removeClass('has-success has-error')
.addClass(result ? 'has-success' : 'has-error');
return result;
}
function validate() {
return [
validateInput($('#name'), /^[a-z]{2,16}$/i),
validateInput($('#message'), /^[a-z]{15,100}$/i),
].every(Boolean);
}
$('form').on({
input: validate,
submit(e) {
if (!validate()) {
e.preventDefault();
}
},
});
function removeChars($str, $n) {
return implode('', array_filter(str_split($str), function($v, $k) use($n) {
return (($k + 1) % $n);
}, ARRAY_FILTER_USE_BOTH));
}
$str = "0123456789";
for ($n = 2; $n <= 4; $n++) {
echo removeChars($str, $n)."\n";
}
/*
выведет следующее:
02468
0134679
01245689
*/
Вот этот атрибут v-masonry мне нужно добавлять и убирать по условию.
Дублировать разметку через v-if v-else неудобно, т.к. блок большой.