function truncInteger(number, precision) {
return number - (number % precision);
}
console.log(truncInteger(1000040, 100));
console.log(truncInteger(1200040, 100));
function roundInteger(number, precision) {
return Math.round(number / precision) * precision;
}
console.log(roundInteger(1000040, 100));
console.log(roundInteger(1200040, 100));
console.log(roundInteger(1000080, 100));
console.log(roundInteger(1200080, 100));
debounce(getData(), 2000);
const getData = useCallback(debounce(query => {
/*
* здесь всё по-старому, кроме body: JSON.stringify({ query: state.query }),
* надо заменить на body: JSON.stringify({ query }),
*/
}, 2000), []);
useEffect(() => {
getData(state.query);
}, [ state.query ]);
Хочу купить 34 дюймовый монитор в пределах 40 тыс, за эту сумму можно взять либо LG на IPS 60Ghz ровный, либо Huawai изогнутый на VA, 165Ghz.
что лучше подойдёт с точки зрения разработчика?
class Semaphore {
constructor(max = 1) {
if (max < 1) { max = 1; }
this.max = max;
this.count = 0;
this.queue = [];
}
acquire() {
let promise;
if (this.count < this.max) {
promise = Promise.resolve();
} else {
promise = new Promise(resolve => {
this.queue.push(resolve);
});
}
this.count++;
return promise;
}
release() {
if (this.queue.length > 0) {
const resolve = this.queue.shift();
resolve();
}
this.count--;
}
}
const semaphore = new Semaphore(10);
for (const url of urls) {
await semaphore.acquire();
void downloadUrlSynchronized(url, semaphore);
}
async function downloadUrlSynchronized(url, semaphore) {
const resp = await fetch(url);
const blob = await resp.blob();
semaphore.release();
// const name = new URL(url).pathname.slice(1);
// downloadBlob(blob, name, url);
}
fetch
) будет не больше 10 в один момент, что собственно и требовалось.3
:[ 7, 7, 7, 0, 1, 1 ]
? В первом случае 2
- повторяются семёрка и единица, во втором 5
- три семёрки плюс две единицы.const duplicateCount = Object
.values(arr.reduce((acc, n) => (acc[n] = (acc[n] || 0) + 1, acc), {}))
.filter(n => n > 1)
.length;
// или
const duplicateCount = Array
.from(arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map).values())
.reduce((acc, n) => acc + n, 0);
// или
const duplicateCount = new Set(arr.filter((n, i, a) => i !== a.indexOf(n))).size;
const duplicateCount = Object
.values(arr.reduce((acc, n) => (acc[n] = acc.hasOwnProperty(n), acc), {}))
.reduce((acc, n) => acc - !n, arr.length);
// или
const duplicateCount = Array
.from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map).values())
.reduce((acc, n) => acc + (n > 1) * n, 0);
// или
const duplicateCount = arr
.filter((n, i, a) => a.indexOf(n) !== a.lastIndexOf(n))
.length;
import { useEffect, useState } from "react";
export default function MyComponent() {
const [val1, setVal1] = useState();
const [val2, setVal2] = useState();
useEffect(() => setVal2(val1),[val1]);
return <>
<input type="text" value={val1} onChange={(ev) => setVal1(ev.target.value)} />
<input type="text" value={val2} onChange={(ev) => setVal2(ev.target.value)}/>
<div>{val2}</div>
</>
}
function dataPage() {
fetch('example.com')
.then(response => response.json())
.then(data => {
const promises = data.URLs.map(url => fetch(url).then(r => r.json()))
return Promise.all(promises).then((arr) => {
data.arr = arr;
return data;
})
})
.then((data) => {
setState(prevState => {
return (
{
...prevState,
data // вероятно тут спред нужен по логике
}
)
})
})
}