i
— это индекс массива — номер позиции в нём, считая от 0
.arr[i]
— значение, которое лежит в массиве arr
в позиции i
.arr[4]
например – это пятая по счету коробка, т.к. счет идёт от 0..show-cart
.delete-item
, то действуем далее.document.body.addEventListener('click', e => {
e.stopPropagaion();
e.stopImmediatePropagation();
e.preventDefault();
}, { capture: true });
Аналогично можно и для клавиатурных событий попробовать. function workHours(on, off, testNow = null) {
// TODO: validate input
const now = testNow ?? new Date().getHours();
const a = Number(on);
let b = Number(off);
const format = (status, nextTime) => ({ status, next_time: nextTime });
if (a === b) {
return format(true, 0);
}
if (a > b) {
b += 24;
}
if (now >= a && now < b) {
return format(true, 0);
}
if (now < a) {
return format(false, a - now);
}
return format(false, a + 24 - now);
}
// Тесты тесты
const tests = [
[9, 17, 10, { status: true, next_time: 0 }],
[9, 17, 8, { status: false, next_time: 1 }],
[9, 17, 17, { status: false, next_time: 16 }],
[19, 17, 17, { status: false, next_time: 2 }],
[19, 19, 17, { status: true, next_time: 0 }],
];
const eq = (a, b) => Object.entries(a).every(([k, v]) => b[k] === v);
tests.forEach(test => {
const [on, off, now, expected] = test;
const result = workHours(on, off, now);
const testResult = eq(result, expected);
if (testResult) {
console.log('Passed', {on, off, now, result});
}
console.assert(testResult, test);
});
- console.log(data.data.values)
+ console.log(data.values)
range
, majorDimension
и values
. Последнее и интересует. const findRangeKey = (keysArray, keyString) => {
const num = Number(keyString);
if (keysArray.includes(keyString)) {
// exact match
return keyString;
}
return keysArray.find(key => {
const [min, max] = key.split('-').map(Number);
if (max !== undefined) {
return num >= min && num <= max;
}
return num === min;
});
};
findRangeKey(['10', '20-40'], 30); // "20-40"
findRangeKey(['10', '20-40'], 20); // "20-40"
findRangeKey(['10', '20-40'], 10); // "10"
const data = {
'10': {
'5-15': {
title: '10-5-15',
}
},
'20-60': {
'5': { title: '20-60-5' },
'10': { title: '20-60-10' },
'20-40': { title: '20-60-20-40' },
},
};
const getTitle = (data, a, b) => {
const aKey = findRangeKey(Object.keys(data), a);
if (!aKey) {
return null;
}
const bKey = findRangeKey(Object.keys(data[aKey]), b);
if (!bKey) {
return null;
}
return data[aKey][bKey].title;
};
console.log(getTitle(data, '10', '5')); // "10-5-15"
console.log(getTitle(data, 40, 30)); // "20-60-20-40"
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 дело такое, там и объект ключом может.