const entries = Object.entries(obj); for (const entry of entries) { if (!isObject(entry)) { result = Object.assign(result, Object.fromEntries(entry)); } else return cloneDeep(entry);
const [ buttonText, setButtonText ] = useState('hello, world!!');
const [ clicked, setClicked ] = useState(false);
function onClick() {
setClicked(true);
setTimeout(() => {
setButtonText('fuck the world');
setClicked(false);
}, 1000);
}
<button onClick={onClick} disabled={clicked}>{buttonText}</button>
{clicked ? <img src="..." /> : null}
const merge = (...arrs) =>
Array.from(
{ length: Math.max(...arrs.map(n => n.length)) },
(_, i) => Object.assign({}, ...arrs.map(n => n[i]))
);
const arr = merge(arr1, arr2);
const merge = (...arrs) =>
arrs.reduce((acc, n) => (
n.forEach((m, i) => Object.assign(acc[i] ??= {}, m)),
acc
), []);
function replaceText(node, replacer) {
if (node.nodeType === Node.ELEMENT_NODE) {
node.childNodes.forEach(n => replaceText(n, replacer));
} else if (node.nodeType === Node.TEXT_NODE) {
node.textContent = replacer(node.textContent);
}
}
replaceText(document.body, str => str.replace(/\d/g, 'hello, world!!'));
function replaceText(node, replacer) {
const iter = document.createNodeIterator(node, NodeFilter.SHOW_TEXT);
for (let n = null; n = iter.nextNode();) {
n.nodeValue = replacer(n.nodeValue);
}
}
useCapture
A boolean value indicating whether events of this type will be dispatched to the registered listener before being dispatched to any EventTarget beneath it in the DOM tree.
element.addEventListener(event, handler, true)
. case ADD_PRODUCT:
const item = state.products.find(n => n.id === action.payload.id);
return {
...state,
products: item
? state.products.map(n => n === item ? { ...n, count: n.count + 1 } : n)
: [ ...state.products, { ...action.payload, count: 1 } ],
};
document.querySelector('.ticket_content').addEventListener('input', e => {
document.querySelector('.ticket_price').innerText =
Array.prototype.reduce.call(
e.currentTarget.querySelectorAll('.plus_minus'),
(acc, n) => acc + n.querySelector('input').value * n.nextElementSibling.innerText,
0
);
});
document.querySelectorAll('.item').forEach((n, i) => {
n.querySelectorAll('.card-item').forEach(m => m.textContent = `button ${i}`);
});
for (const [ i, n ] of document.querySelectorAll('.item').entries()) {
for (const m of n.getElementsByClassName('card-item')) {
m.innerText = 'button ' + i;
}
}
const items = document.querySelector('.parent-list').children;
for (let i = 0; i < items.length; i++) {
const subitems = items[i].querySelector('.card-list').children;
for (let j = 0; j < subitems.length; j++) {
subitems[j].innerHTML = 'button '.concat(i);
}
}
function shuffle(arr) {
for (let i = arr.length; i > 1;) {
const j = Math.random() * (i--) | 0;
[ arr[i], arr[j] ] = [ arr[j], arr[i] ];
}
return arr;
}
computed: {
shuffledAnswers() {
return shuffle(Object.entries(this.questions[this.idx].answers));
},
...
<div v-for="[ key, answer ] in shuffledAnswers">
...
"answers": {
import usersData from "../questions.json";
selectedAnswer: "",
count: 5,
<div v-if="idx < count">
computed:{ randomQuestions () { usersData.sort(() => Math.random() - 0.5)
:disabled="selectedAnswer != ''"
<button @click="nextQuestion"
document.querySelectorAll("input").forEach((el) => (el.checked = false));
:key="индекс_вопроса"
). Но это, конечно, костыльное решение. Правильно будет управлять радиокнопками основываясь на данных, через v-model
.@change="answered($event)"
answered(e) { this.selectedAnswer = e.target.value; if (this.selectedAnswer == this.questions[this.idx].correctAnswer) { this.correctAnswers++;
поскольку наше приложение — одностраничное, не сконфигурировав соответствующим образом сервер мы заставим пользователей получать ошибку 404, если они перейдут поhttp://oursite.com/user/id
напрямую
<...>
всё, что нужно — единственная "резервная" запись в конфигурации сервера. Если URL не совпадает ни с одним статическим файлом, сервер должен просто отдать index.html, в котором и живёт наше приложение
const bullshitInsert = str => str
.replace(/(?<=[2468])(?=[2468])/g, '*')
.replace(/(?<=[13579])(?=[13579])/g, '-');
const bullshitInsert = str => Array
.from(str, (n, i) => (n * str[i - 1] && !((n ^ str[i - 1]) & 1) ? '*-'[n & 1] : '') + n)
.join('');
const result = Object
.entries(arr.reduce((acc, n) => ((acc[n.name] ??= []).push(n.value), acc), {}))
.reduce((acc, [ k, v ]) => (acc[k] = v.length === 1 || v, acc), {});
ThirdName: true
true
там, где значение одно:const result = Object
.entries(arr.reduce((acc, n) => ((acc[n.name] ??= new Set).add(n.value), acc), {}))
.reduce((acc, [ k, [...v] ]) => (acc[k] = ~-v.length ? v : v[0], acc), {});
<div v-for="(row, iRow) in rows" class="board__rows">
<div
v-for="(col, iCol) in columns"
v-text="col + row"
:class="[ [ 'white', 'black' ][(iRow ^ iCol) & 1], 'board__square' ]"
></div>
</div>
React.useCallback((key, val) => {
setData(data => ({
...data,
[key]: val(data[key]),
}));
}, [])
onChange('list', list => list.map((n, i) => i === index
? { ...n, [prop]: value }
: n
))
onChange('description', () => e.target.value)
const filter = (arr, conditions) =>
arr.filter(
function(n) {
return this.every(([ k, values ]) => values.some(v => v.includes(n[k])));
},
Object
.entries(conditions)
.map(n => [ n[0], [].concat(n[1]).map(String) ])
.filter(n => n[1].length)
);
А лучше всего просто объяснить что бы я в итоге допер сам!
Вначале удаляем элемент из массива, затем выбираем новый. Но получается так, что, иногда, выбор случайного элемента массива, происходит до удаления элемента из массива и он выбирает только что удаленный элемент.
Как правильно реализовать такую логику?
useEffect(() => {
dispatch({
type: SET_RND_NUM,
payload: state.arr[Math.random() * state.arr.length | 0],
});
}, [ state.arr ]);
Cannot read properties of undefined (reading 'lastname')
async addNewEmployee({ commit }, employee) { await axios .post(`http://127.0.0.1:8000/api/v1/employees/`, { lastname: employee.lastname,
@submit.prevent="addNewEmployee(employee)"
const { drawImage } = canvas.getContext('2d') as CanvasRenderingContext2D; drawImage( ...
const obj = {
fucking_value: 666,
fucking_method() {
if (!this.hasOwnProperty('fucking_value')) {
throw 'FUCK OFF';
}
console.log(this.fucking_value);
},
};
const { fucking_method } = obj;
fucking_method();
this
- бегом гуглить, разбираться, что это, зачем, к каким значениям в каких случаях даёт доступ.