$minPrices = array_values(array_reduce($arr, function($acc, $n) {
$key = $n['code_id'];
if (!isset($acc[$key]) || $acc[$key]['price'] > $n['price']) {
$acc[$key] = $n;
}
return $acc;
}, []));
const getNestedItems = (data, test) =>
data instanceof Object
? Object.values(data).flatMap(n => getNestedItems(n, test))
: test(data) ? [ data ] : [];
const result = getNestedItems(obj, x => /^[A-Z]+$/.test(x)).join('');
function* getNestedItems(data, test) {
if (Object(data) === data) {
for (const k in data) if (Object.hasOwn(data, k)) {
yield* getNestedItems(data[k], test);
}
} else if (test(data)) {
yield data;
}
}
const result = ''.concat(...getNestedItems(obj, x => x?.toUpperCase?.() === x));
<div class="wrapper" v-if="надо рендерить обёртку">
...
<элемент />
...
</div>
<элемент v-else />
все с атрибутом required
const className = 'здесь ваш класс';
const inputs = document.querySelectorAll(`.${className}`);
// или
const inputs = document.getElementsByClassName(className);
const isFilled = [...inputs].every(n => n.value);
// или
const isFilled = !Array.prototype.some.call(inputs, n => !n.value);
// или
let isFilled = true;
for (const n of inputs) {
if (!n.value) {
isFilled = false;
break;
}
}
// или
let isFilled = true;
for (let i = -1; ++i < inputs.length && (isFilled = !!inputs[i].value);) ;
// или
const isFilled = !(function isEmpty(i) {
return i < inputs.length && (!inputs[i].value || isEmpty(-~i));
})(0);
if (this.frame < 0) { this.frame = this.slides.lenght-1; this.setBackground(this.slides[this.frame]) }
frame
неотрицательный, то вызывать setBackground
уже не надо?undefined
. А после вычитания единицы - NaN
. Элемента с индексом NaN
в массиве нет, так что в setBackground
улетает undefined
- его вы и видите в стилях.if (this.frame > this.slides.length) {
buttonLeft.addEventListener('click', slider.left());
Array.from(
arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map),
n => [ n[0], (n[1] / arr.length * 100).toFixed(2) + '%' ]
)
yAxis: {
plotLines: [
{
color: 'red',
value: 13,
width: 5,
zIndex: 666,
},
],
...
const clone = (data, replacements) =>
data instanceof Object
? data instanceof Array
? data.map(n => clone(replacements?.hasOwnProperty(n) ? replacements[n] : n, replacements))
: Object.fromEntries(Object.entries(data).map(([ k, v ]) => [
k,
clone(replacements?.hasOwnProperty(k) ? replacements[k] : v, replacements)
]))
: data;
const products = arr.map(n => clone(obj.product[0], n));
"[object Object]"
. Всё.toString
(конечно, поступать так имеет смысл только в том случае, если вы можете гарантировать, что строковые представления будут уникальны). $doc = new DOMDocument();
$doc->loadHTML($html);
$a = $doc->getElementsByTagName('a');
$result = array_map([ $doc, 'saveHTML' ], iterator_to_array($a));
$result = preg_split('/(?<=\/a>)(?=<a)/', $html);
// или
preg_match_all('/<a .*?>.*?<\/a>/', $html, $matches);
$result = $matches[0];
out.innerText = badWords.reduce((str, n) => str.replaceAll(n, '*'.repeat(n.length)), field);
for (const n of badWords) {
field = field.replace(RegExp(n, 'g'), Array(n.length + 1).join('*'));
}
out.textContent = field;
out.innerHTML = (function replace(str, i, word = badWords[i]) {
return word
? replace(str.split(word).join(Array(word.length).fill`*`.join``), -~i)
: str;
})(field, 0);
let index = -1;
setInterval(el => {
const show = !el.classList.contains('_active');
index = (index + show) % infoModal.length;
el.innerText = infoModal[index].title;
el.classList.toggle('_active', show);
}, 1000, document.querySelector('.modal__title'));
Если, к примеру, нужно скрывать блок каждый раз через5 сек, а показывать блок через рандомный промежуток времени?
(function updateText(el, i) {
const show = el.classList.toggle('_active');
i = (i + show) % infoModal.length;
el.textContent = infoModal[i].title;
setTimeout(updateText, 1000 + !show * Math.random() * 3000, el, i);
})(document.querySelector('.modal__title'), -1);
Время, которое я задаю, применяется к fadeOut, а вот к runProgress нет
this.fadeOut = `fadeOut ${this.time}s linear forwards`, this.runProgress = `runProgress ${this.time}s liner forwards`,
v-for
. Если изменить значение свойства time и добавить в messages новый элемент, то у тех, что были добавлены раньше, изменится длительность анимации. Наверное, стоит вырезать свойства fadeOut и runProgress, элементам messages при создании добавлять актуальное значение свойства time, типа time: this.time
, и использовать его при задании стилей:methods: {
getStyle: (name, { time }) => ({
animation: `${name} ${time}s linear forwards`,
}),
...
:style="getStyle('fadeOut', message)"
:style="getStyle('runProgress', message)"