var groups = "apiclub,55293029"; // сюда подставить ваши группы
var counts = API.groups.getById({
group_ids: groups,
fields: "members_count",
})@.members_count;
var total = 0;
while (counts.length > 0) total = total + counts.pop();
return total;
$code = <<<EOFVK
var groups = "apiclub,55293029";
var counts = API.groups.getById({
group_ids: groups,
fields: "members_count",
})@.members_count;
var total = 0;
while (counts.length > 0) total = total + counts.pop();
return total;
EOFVK;
// токен сообщества получить в Настройках своего сообщества, Работа с API
// нажать кнопку Создать ключ и выбрать любую галочку.
$token = '123123123';
$method = 'execute';
$params = [
'access_token' => $token,
'v' => '5.130',
];
$post_data = [
'code' => $code,
];
$url = sprintf(
'https://api.vk.com/method/%s?%s',
$method,
http_build_query($params)
);
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post_data,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$curl_result = curl_exec($ch);
$data = json_decode($curl_result);
$count = $data->response;
printf('<h2>Сейчас в группах %d участников</h2>', $count);
const appendByAttr = (title, subtitle) => jQuery(`a[title="${title}"] ~ .ammenu-submenu-container .ammenu-item.-child.-col-4 a[title="${subtitle}"] ~ ul li:last-child`)
.append($(`a[title="${title}"] ~ .ammenu-submenu-container .ammenu-item__extra`));
appendByAttr('Title 1', 'Subtitle 1');
appendByAttr('Title 2', 'Subtitle 2');
appendByAttr('Title 3', 'Subtitle 3');
Number(num_string)
/^[\*\/\+-]$/
"23к1с2".split(/[а-яй]+/) // [ "23", "1", "2" ]
"23к1с2".match(/([а-яй]+)/g) // [ "к", "с" ]
YaParse = (str) => {
const nums = str.split(/[а-яй]+/) // [ "23", "1", "2" ]
const parts = str.match(/([а-яй]+)/g) // [ "к", "с" ]
parts.unshift("дом");
return nums.reduce((acc, c, i) => (acc[parts[i]] = c, acc), {});
}
console.log(YaParse("23к1с2")); // { "дом": "23", "к": "1", "с": "2" }
false
"1a".codePointAt(0) // 49 - ascii и Unicode код символа "1"
"1a".codePointAt(1) // 97 - ascii и Unicode код символа латинской маленькой "a"
NaN
вообще беспорядок: 123 < "Z" // false
123 > "Z" // тоже false
sec
см. URL.searchParams:const params = (new URL(document.location)).searchParams;
const sec = Number(params.get('sec')) || 5; // или 5 по умолчанию
const future = new Date();
future.setTime(future.getTime() + 1000 * sec);
future
.const update = () => {
const diff = future.getTime() - Date.now(); // сколько осталось, в миллисекундах
const secondsLeft = Math.round(diff / 1000); // сколько осталось секунд
if (diff <= 0) {
// время прошло
} else {
// обновить в кнопке число оставшихся секунд
// и вызвать это обновление снова через чуть-чуть:
setTimeout(update, 200);
}
}
update();
Number()
при вызове как функции, конвертирует аргумент в численный тип. Если не получается, возвращает NaN
(Not A Number) – специальное значение, которое при конвертации в булев даёт false
. (! Number(value))
сработает когда переданное не перевести в число, или когда число 0
.Number()
довольно строг с конвертацией в число, по сравнению даже с parseInt()
:parseInt("123HabraHabr") // 123
Number("123HabraHabr") // NaN
Number()
проглотил бы как число, но при этом она содержала код, который JS как-то интерпретирует. Типа '123 & alert("Habr!")'
– но нет, через Number()
это не пролезет, увы. reduce()
в передаваемом объекте добавьте поле для передачи индекса баннера.i
и сохранять его в объекте;const container = document.querySelector(".js-cards");
const cards = [...container.children].reduce(function (obj, item, i) {
if ("card" in item.dataset) {
obj[item.dataset.card] = (obj[item.dataset.card] || []).concat(item);
obj["all"] = (obj["all"] || []).concat(item);
if (obj.hasOwnProperty('bannerIndex')) delete obj.bannerIndex;
} else {
if (! obj.hasOwnProperty('bannerIndex')) obj.bannerIndex = i;
obj["banners"] = (obj["banners"] || []).concat({ item: item, index: obj.bannerIndex });
}
return obj;
}, {});
console.log(cards);
.then()
добавьте что-то типа .catch(err => console.error(err))
;
util.status('test')
.then(...)
.then(() => setTimeout(relOnline, 500)
.catch((err) => console.error(err))