const valueToDel = 'value1';for (const n of Object.entries(obj)) {
if (n[1] === valueToDel) {
delete obj[n[0]];
}
}const newObj = Object
.entries(obj)
.reduce((acc, [ k, v ]) => (v !== valueToDel && (acc[k] = v), acc), {});
// или
const newObj = Object.fromEntries(Object
.entries(obj)
.filter(n => n[1] !== valueToDel)
);
$(response).filter('.item').each(function() {
$owl.trigger('add.owl.carousel', this);
});
$owl.trigger('refresh.owl.carousel');
this.timeout = setTimeout(...beforeRouteLeave(to, from, next) {
clearTimeout(this.timeout);
next();
},
let workingLine = function() {firstLetter = workingLine[0]firstLetter.match( /[a-z]|[а-я]/g )0, которого нет, т.е., получаете undefined, и у этого undefined пытаетесь вызвать строковый метод.
.b-popup появляется, он закрывает собой .b-block, возникает событие mouseleave, и его надо скрывать. А как он скрылся - его надо снова показывать, потому что на .b-block возникает событие mouseenter. Ну вот так оно по кругу и происходит.pointer-events: none для .b-popup. Или поместите .b-popup внутрь .b-block.
Внутри цикла не работает setTimeout
const wait = time => new Promise(r => setTimeout(r, time));(async () => {
for (const n of [ 1, 2, 3, 4, 5 ]) {
console.log(n);
await wait(1000);
}
})();[ 1, 2, 3, 4, 5 ].reduce((promise, n) => promise
.then(() => console.log(n))
.then(() => wait(1000))
, Promise.resolve());
в Storage сохраняются введенные значения, а в инпут - нет
$('#text')
.val(localStorage.getItem('key') || '')
.on('input', e => localStorage.setItem('key', e.target.value));
navContainer: $(this).prev().find('.arrows').arrows и у .i-catalogList всё-таки был общий предок
nextHandler = () => {
const items = [...this.state.items];
items.push(items.shift());
this.setState({ items });
}
prevHandler = () => {
const items = [...this.state.items];
items.unshift(items.pop());
this.setState({ items });
}<button onClick={this.rotate} data-step={-1}>prev</button>
<button onClick={this.rotate} data-step={+1}>next</button>
<button onClick={this.rotate} data-step={-2}>double prev</button>
<button onClick={this.rotate} data-step={+3}>triple next</button>rotate = ({ target: { dataset: { step } } }) => {
this.setState(({ items }) => {
step %= items.length;
return {
items: [
...items.slice(step),
...items.slice(0, step),
],
};
});
}
.ranging {
display: none;
}
.ranging.opened {
display: block;
}const buttonSelector = '.selector';
const contentSelector = '.ranging';
const activeClass = 'opened';
const toggleContent = (contents, index) =>
contents.forEach((n, i) => n.classList.toggle(activeClass, i === index));
// делегирование, назначаем обработчик клика один раз для всех кнопок
// наверное, у них есть какой-то общий предок, тогда вместо документа
// вешать обработчик следует на него:
// document.querySelector('селектор_контейнера_с_кнопками').addEventListener(...
document.addEventListener('click', e => {
const button = e.target.closest(buttonSelector);
if (button) {
const buttons = document.querySelectorAll(buttonSelector);
const index = Array.prototype.indexOf.call(buttons, button);
toggleContent(document.querySelectorAll(contentSelector), index);
}
});
// или, назначаем обработчик клика индивидуально каждой кнопке
const onClick = function(e) {
toggleContent(this, +e.currentTarget.dataset.index);
}.bind(document.querySelectorAll(contentSelector));
document.querySelectorAll(buttonSelector).forEach((n, i) => {
n.dataset.index = i;
n.addEventListener('click', onClick);
});
в created() пишет localStorage или document is not defined <...> nuxt
if (process.client) {
// здесь можете пощупать localStorage
}
Документация прочитана, наверно не настолько внимательно, чтобы понять
check-in-changed и check-out-changed.
filters: [
{ name: 'calculator.brand_filter', getter: obj => obj.brand.name, value: '' },
{ name: 'calculator.company_filter', getter: obj => obj.company.name, value: '' },
{ name: 'calculator.country_filter', getter: obj => obj.brand.country, value: '' },
{ name: 'calculator.side_filter', getter: obj => obj.sides, value: '' },
],computed: {
filteredProfiles() {
return this.filters.reduce((profiles, { value, getter }) => {
return value
? profiles.filter(n => getter(n) === value)
: profiles;
}, this.profiles);
},Vue.component('filter-select', {
props: [ 'name', 'options', 'value' ],
template: `
<div>
<p>{{ name }}<p>
<select :value="value" @change="$emit('input', $event.target.value)">
<option value="">-</option>
<option v-for="n in options">{{ n }}</option>
</select>
</div>`
});computed: {
filterOptions() {
return this.filters.map(n => [...new Set(this.profiles.map(n.getter))]);
},<filter-select
v-for="(n, i) in filters"
v-model="n.value"
:options="filterOptions[i]"
:name="trans(n.name)"
></filter-select>methods: {
resetFilters() {
this.filters.forEach(n => n.value = '');
},<button @click="resetFilters">{{ trans('calculator.reset_filter') }}</button>
<select v-model="brand" class="custom-select">filteredProfiles() {
return this.profiles.filter(n => n.brand.name === this.brand);
},<div v-for="profile in filteredProfiles" class="row feed">