indexOf()
в лоб. Костыль только для двух повторов, но, по идее, быстрее регулярок:function haz2ones(str) {
const s = str.toString();
const search = '1';
let i = s.indexOf(search);
if (!~i) return false;
i = s.indexOf(search, i + 1);
if (!i) return false;
if (!!~s.indexOf(search, i + 1)) return false;
return true;
}
const tests = [
[1, false],
[11, true],
[111, false],
['1', false],
['11', true],
['111', false],
['100001', true],
['000011', true],
[12345678901234567890, true],
];
return tests.map(e => haz2ones(e[0]) === e[1] ? '+' : '- ' + e[0]);
// +,+,+,+,+,+,+,+,+
ffmpeg -i source.mp4 -t 1:30:00 -c copy part1.mp4
ffmpeg -ss 1:30:00 -i source.mp4 -c copy part2.mp4
www.youtube.com/get_video_info?video_id=XXXXXX
XXXXXX
подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU
после слеша.url_encoded_fmt_stream_map
. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url
– это ссылка на единый скачивабельный видеофайл.function getUrlParams(search) {
let hashes = search.slice(search.indexOf('?') + 1).split('&')
let params = {}
hashes.map(hash => {
let [key, val] = hash.split('=')
params[key] = decodeURIComponent(val)
})
return params
}
var s = '------'; // здесь длиннющая строка из ответа /get_video_info
var a = getUrlParams(s);
var b = getUrlParams(a.url_encoded_fmt_stream_map);
console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл
$('.parent div:last-child').addClass('div2');
Замыкание — это комбинация функции и лексического окружения, в котором эта функция была определена.
A closure is the combination of a function and the lexical environment within which that function was declared.
function makeCounter() {
// далее ваш код:
let count = 0;
function counter() {
return count += 1;
}
// конец вашего кода.
return counter; // вернули Функцию (с её окружением)
}
var myCounter = makeCounter();
// вот теперь к значению count не добраться - приватность!
// зато
console.log(myCounter()); // 1
console.log(myCounter()); // 2
console.log(myCounter()); // 3
aom
/ av1
, который упорно показывал свою версию как 0.1.0
, а не требуемую 1.0.0
. Создал тикет. Эта мелочь вылечилась отказом от кодека aom - в 376-й строке скрипта build-ffmpeg
заменил --enable-libaom
на --disable-libaom
const digits = [1,2,3,4,5,6,7,8,9];
const arr = [];
for (let i=0; i<4; i++) {
const n = Math.floor(Math.random() * digits.length);
arr.push( digits.splice(n, 1)[0] );
}
// arr == [2,9,8,1] и каждый раз по-разному )