const keys = ['key1', 'key2', 'key3'];
const values = ['value1', 'value2', 'value3', 'value4', 'valu5', 'value6'];
const makeGen = function*(arr) {
let index = 0;
const { length } = arr;
while (true) {
yield arr[index++ % length];
}
}
const keyGen = makeGen(keys);
const valGen = makeGen(values);
const length = Math.max(keys.length, values.length);
const result = Array.from({ length }, () => [keyGen.next().value, valGen.next().value]);
console.log(JSON.stringify(result, null, 2));
/*
[
[
"key1",
"value1"
],
[
"key2",
"value2"
],
[
"key3",
"value3"
],
[
"key1",
"value4"
],
[
"key2",
"valu5"
],
[
"key3",
"value6"
]
]
*/
fadeOut()
вероятно, из jQuery?- elem.fadeOut();
+ $('selector').fadeOut();
Date.now()
и сколько сейчас времени до времени-Ч. И это отрисовали. Fingerprint2.get(hash => {
$.ajax({
type: 'post',
url: 'https://api.example.com/log',
dataType: 'json',
data: { hash },
success: res => console.log('OK!', res),
error: console.error,
});
});
Но вообще, переходите на поддерживаемую и обновляемую версию пакета @fingerprintjs/fingerprintjs const MyMap = new Map([['aAa', 'A'], ['bbb', 'B'], ['CcC', 'C']]);
const toRename = [...MyMap.keys()].filter(key => key.toLowerCase() !== key);
// [ "aAa", "CcC" ]
toRename.forEach(key => {
MyMap.set(key.toLowerCase(), MyMap.get(key));
MyMap.delete(key);
});
// MyMap: { bbb → "B", aaa → "A", ccc → "C" }
По-хорошему, надо проверять ещё, что ключ именно строка. А то Map дело такое, там и объект ключом может.$groups = [
'detailed',
'parent' => [
'short',
'parent' => [
'short',
'parent' => [
'short',
],
],
],
];
npm init
Для этого понадобится сначала установить на комп node
и npm
npm install ...
main.js
, где объединить ваш код и этот модульimport { Game } from 'js-chess-engine'; // 1-я строчка в файле main.js
const game = new Game();
// ... ваш код, взаимодействующий с game
ffmpeg \
-i 1.gif \
-i 2.gif \
-filter_complex vstack \
result.gif
Array.from(employees, ({name, age}) => `Имя: ${name}, возраст: ${age}`)
createCounter()
создаёт и возвращает новую функцию. С которой в комплекте идёт свой новый «чемодан» замыкания, в котором лежит своя переменная counter
. откуда беретсяcounter
при втором вызовеconsole.log(z())
createCounter()
класс1 И класс2
— чтобы непременно оба были в наличии у элемента, и тогда только его брать;класс1 ИЛИ класс2
— достаточно любого одного из двух, ну или оба, вообще супер.document.querySelector('.popup__close.popup__area'); // без пробела
document.querySelector('.popup__close, .popup__area'); // через запятую
querySelector()
выбирает первый подходящий найденный элемент. Один.querySelectorAll()
выберет все подходящие.