var rawData = [
{ id:1,name:"Root element",parent:0 },
{ id:2,name: "Child of the first element", parent: 1},
{ id:555, name: "Child of the second element", parent:2}
];
function pack( data ){
const childs = id =>
data.filter( item => item.parent === id )
.map(
({id,name}) => ({id,name, children: childs(id)})
).map(
({id,name,children}) => children.length ? {id,name, children} : { id, name }
);
return childs(0);
}
console.log(JSON.stringify(pack(rawData)))
function myAwesomeAnimation(){
return new Promise( function(resolve, reject){
// some code
resolve(); //animation rendering complete
})
}
document.querySelector('#myAwesomeAnimationStartButton')
.addEventListener('click', function({ target }){
if (target.dataset.animationRendering) return;
target.dataset.animationRendering = target.disabled = true;
myAwesomeAnimation().then( _ => target.dataset.animationRendering = target.disabled = false );
})
const counter = Counter();
//тут counter будет равен
function(){
count++;
return count;
}
// переменная count будет доступна из этой функции,
// но она не равна переменной из const counter2 = Counter()
// у counter и couner2 разные области видимости (контекст)
// т.к. у каждой из них свой стек вызовов
if (activeNote) {
const note = document.getElementById(activeNote)
note.children[0].innerHTML = title;
note.children[1].innerHTML = created.toLocaleString("en-US");
note.children[2].innerHTML = body;
note.style.backgroundColor = color;
activeNote = null;
}
document.getElementById('listed')
.append(document.createTextNode(title + ' ' + created.toLocaleString("en-US") + ' ' + body + ' '));
if (activeNote) {
let note = document.getElementById(activeNote);
note.parentElement.removeChild(note);
activeNote = null;
}
Mixed Content: The page at 'https://bundlespace.com/register-license?image=10005' was loaded over HTTPS, but requested an insecure resource 'httр://bundlespace.com/image/10005'. This request has been blocked; the content must be served over HTTPS.
var range =ss1.getRange(ard[i][1]);
range.setBackgroundColor("#000")
const digits = {Z:2000, M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};
function roman2arabic(str){
if (!/^[IVXLCDMZ]+$/i.test(str)) throw new Error('Incorrect roman number format: ' + str)
return str.toUpperCase().split('').reduce(function(r,v,i,arr){
const [ a, b, c ] = [ digits[arr[i]], digits[arr[i+1]], digits[arr[i+2]]];
if (b && c && a <= b && b < c)
throw new Error('Incorrect roman number format: ' + str);
return b > a ? r - a : r + a;
}, 0)
}
function arabic2roman(num){
if (!/^\-?\d+$/.test(num+'')) throw new Error('Can`t convert that arabic numeric to roman: ' + num)
if (num < 1) return '';
let result = '';
for (let key in digits)
while ( num >= digits[key] ) {
result += key;
num -= digits[key];
}
return result;
}
function calculator(string){
let badChars = [];
string = string.replace(/[^IVXLCDMZ\d+\-*\/]/gi, chr => {
if (chr !== ' ') badChars.push(chr);
return '';
});
if (badChars.length > 0)
throw Error('Символы не допустимы: ' + badChars.join(' '));
let isRoman = /^[IVXLCDMZ]+$/i,
vars = string.split(/[+\-*\/]/g),
action = string.match(/[+\-*\/]/)[0];
if (vars.length !== 2)
throw Error("Должно быть лишь два операнда");
let r = vars.reduce((s,v)=> s + isRoman.test(v),0);
if (r === 1)
throw Error("Оба числа должны быть либо римскими, либо арабскими, исправьте выражение: " + string);
else if (r === 2)
vars = vars.map(v=>roman2arabic(v));
else if (vars.reduce((s,v) => s + /^\d+$/.test(v)) < 2)
throw Error("Приведенные операнды не допустимы, проверьте выражение: " + string);
if (vars.some(v => v < 1 || v > 10))
throw Error("Допустимо значение операндов лишь от 1 до 10 включительно")
let result = Math.floor(eval(vars.join(action)))
return r === 0 ? result.toString() : arabic2roman(result)
}
module.exports = calculator;
function* routes(coords, limit){
coords = coords.sort( (a,b) => a - b );
for (let i = 1; i < coords.length; i++)
if (coords[i] - coords[i-1] > limit){
yield coords.splice(0, i);
i = 1;
}
if (coords.length > 0) yield coords;
}
let arr = [1 , 3 , 10 , 11 , 18 , 5], x = 2;
for (let route of routes(arr,x))
console.log(`Path found: ${route.join(', ')}`)
function* genz( n ){
for ( let i = n-1; i > 1; i--){
let a = n - i;
if (a < i) yield [i,a]
for (let d of [...genz(a)])
if (!d.some(value => value >= a || value >= i)) yield [i, ...d]
}
}
//pretty print
console.log([...genz(13)].map(v=>v.join(' + ')).join('\r\n'), '\r\n');