var arr = [
"weather_c",
"+30",
"population",
10000000,
"city_name",
"Los angeles",
"weather_c",
"+15",
"population",
5000000,
"city_name",
"Chicago"
];
var data = {}
var index = 1;
var i, key, value;
var obj = {}
for(i = 1; i < arr.length; i+=2) {
key = arr[i-1];
value = arr[i];
if( obj.hasOwnProperty(key)) {
data[index.toString()] = Object.assign({}, obj);
index++;
obj = {}
}
obj[key] = value;
}
data[index.toString()] = Object.assign({}, obj);
JSON.stringify(data)
/*
{"1": {"weather_c":"+30","population":10000000,"city_name":"Los angeles"},
"2": {"weather_c":"+15","population":5000000,"city_name":"Chicago"}}
*/
function fibRange( from, to) {
if( isNaN(from) || isNaN(to) || from < 2 || from > to) {
throw "Bad argument(s)";
}
var root5 = Math.sqrt(5), phi = (1 + root5)/2, logPhi = Math.log(phi);
var nFrom = Math.ceil( Math.log((from - 0.5) * root5) / logPhi);
var nTo = Math.floor( Math.log((to+0.5) * root5) / logPhi);
function nthFib(n) {
return Math.round( (Math.pow(phi, n) - Math.pow( -phi, -n)) / (2 * phi - 1));
}
var a = nthFib(nFrom);
var result = [a];
if( nFrom === nTo) return result;
var i = nFrom + 1;
var b = nthFib(i);
while( i <= nTo) {
result.push(b);
b = a + b;
a = b - a;
i++;
}
return result;
}
fibRange(10,377)
/*
13,21,34,55,89,144,233,377
*/
function primes(n) {
var i, j, isPrime = Array(n), result= [];
for(i=2; i<n; i++) isPrime[i] = true;
for(i=2; i * i <= n; i++) {
if( isPrime[i]) {
for(j = i * i; j <= n; j += i) isPrime[j] = false;
}
}
for(i=2; i<n; i++) {
if(isPrime[i] === true) result.push(i);
}
return result;
}
ooooooooooo
||-->
ooooooooooo
||-->
function nearest(arr, total) {
var len = arr.length
, i
, bit
, sum
, n = Math.pow(2, len)
, currDist
, index = undefined
, dist = undefined
, result = []
;
for( i = 1; i < n; i++) {
sum = 0;
for( bit = 0; bit < len; bit++) {
if( i & (1 << bit)) sum += arr[bit];
}
currDist = Math.abs(total - sum);
if( typeof dist === 'undefined' || dist > currDist) {
index = i;
dist = currDist;
if( dist === 0) break;
}
}
for(bit = 0; bit < len; bit++) {
if( index & (1 << bit)) result.push(arr[bit]);
}
return result;
}
nearest([1,3,4,6,8], 12) // [1,3,8]
nearest([1,2,4,6,8], 12) // [2,4,6]
nearest([7,9,13,19,28], 12) // [13] dist = 1
nearest([7,9,13,19,28], 28) // [9,19] не [28] т.к. останавливается на первом найденном варианте
0000 0010
│ │││┕╼ бит 0, чекбокс 0
│ ││└── бит 1, чекбокс 1
│ │└─── бит 2, чекбокс 2
│ └──── бит 3, чекбокс 3
└────── бит 4, чекбокс 4
switch( bitmap) {
case 0: // все выключены
// загрузить что-то там
break;
case 1<<3: // включен только 3-й бит
// загрузить что-то для 3-го чекбокса
break;
case 28: // вкл. 3, 4 и 5-й
// ...
}
Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:
Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.
Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).
Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.
Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
id
находить весь элемент, данные в начале преобразовываются в «словарь» – объект, где свойства это id, а значения элементы.var data = [
{id: 0, name: 'Main', path: '/', childs: [1,2]},
{id: 1, name: 'One', path: '/one', childs: [3]},
{id: 2, name: 'Two', path: '/two', childs: []},
{id: 3, name: 'Three', path: '/one/three', childs: []}
];
function makeTree(d) {
var id, el, i, dict = {}, minId, r;
function parseChildren(el) {
var i, newEl;
for( i = 0; i < el.childs.length; i++) {
newEl = makeElement(dict[ el.childs[i] ]);
parseChildren( newEl);
el.children.push( newEl);
}
delete el.childs;
}
for( i = 0; i < d.length; i++) {
el = d[i];
id = el.id;
if( typeof minId === 'undefined' || minId > id) minId = id;
dict[id] = el;
}
r = makeElement( dict[minId] ); // root element
parseChildren(r);
return r;
}
function makeElement(arrElement) {
return {
name: arrElement.name,
path: arrElement.path,
childs: arrElement.childs,
children: []
};
}
var tree = makeTree(data);
/* {
"name": "Main",
"path": "/",
"children": [{
"name": "One",
"path": "/one",
"children": [{
"name": "Three",
"path": "/one/three",
"children": []
}]
}, {
"name": "Two",
"path": "/two",
"children": []
}]
} */
function stringInc(s) {
var pos = s.length - 1;
while(pos >= 0) {
if( Math.abs(s.charCodeAt(pos) - 52.5) < 5) pos--;
else break;
}
if( ++pos >= s.length) return s; // no number
var numLength = s.length - pos;
var numString = (parseInt(s.substr(pos)) + 1).toString();
if( numString.length < numLength) {
numString = ((Array(1 + numLength).join('0')) + numString).substr(-numLength);
}
return s.substr(0,pos) + numString;
}
stringInc('abc123') // abc124
stringInc('abc999') // abc1000
stringInc('abc00009') // abc00010
stringInc('009') // 010
stringInc('9') // 10
stringInc('aaa') // aaa
var result = { "areas": "значение для areas"}
peremennaya = {...тут весь этот JSON...}
peremennaya.mh // тут нужный массив
'' + el.title + ' - ' + el.count
var d = {"mh": [{"id": "BR", "count": 18516, "title": "Brazil"},
{"id": "US", "count": 4514, "title": "United States"},
{"id": "MY", "count": 390, "title": "Malaysia"},
{"id": "IT", "count": 208, "title": "Italy"}]
};
var result = {areas: d.mh.map(el => ({id:el.id, title:''+el.title+' - '+el.count}))}
// {"areas":[{"id":"BR","title":"Brazil - 18516"},{"id":"US","title":"United States - 4514"},
// {"id":"MY","title":"Malaysia - 390"},{"id":"IT","title":"Italy - 208"}]}
"длина": [слово,слово]
words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);
// make dictionary
var db = [];
for( var i = 0; i < words.length; i++) {
word = words[i];
len = word.length;
if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
if(!~db[len].indexOf(word)) db[len].push(word);
}
function getWords(db, length, n) {
n = n || 3;
var result = [], offset = 0, m;
length = Math.max(0, Math.min(length, db.length));
while( result.length < n) {
m = n - result.length;
if( db[length + offset]) {
result = result.concat( getUpTo(m, db[length + offset]))
}
m = n - result.length;
if( offset && m && db[length - offset]) {
result = result.concat( getUpTo(m, db[length - offset]))
}
m = n - result.length;
if( m === 0) break;
offset++;
if( offset + length > db.length && offset > length) break;
}
return result;
}
function getUpTo(n, arr) {
return arr.slice(0, Math.min(n, arr.length));
}
// Два момента, переключающих расписание
var s18 = getNextMoment( 0, 18); // Sunday 18:00
var f12 = getNextMoment( 5, 12); // Friday 12:00
function getNextMoment( day, hour) {
var D = new Date(), dayDiff;
D.setHours(hour);
D.setMinutes(0);
D.setSeconds(0);
dayDiff = day - D.getDay();
D.setDate( D.getDate() + dayDiff + ( dayDiff < 0 ? 7 : 0));
return D;
}
if( f12 < s18) { // сначала наступит Пятница 12.00
// Режим ожидания
} else { // сначала наступит Воскресенье 18
if( new Date().getHours() < 6) {
// Ночной
} else {
// Дневной
}
}
/**
* Из строки времени в формате HH:MM:SS
* делает объект Date
* с ближайшим, после текущего момента, таким временем.
* @param String строка времени
* @return Date Object
*/
function parseTime(s) {
var now = new Date(), D = new Date(now.getTime()), HMS = s.split(':');
if( HMS.length !== 3) throw({message:"неверный формат времени"});
HMS = HMS.map(function(t){return parseInt(t)}); // перевести строки в целые
D.setHours(HMS[0]);
D.setMinutes(HMS[1]);
D.setSeconds(HMS[2]);
if( D < now) D.setDate( D.getDate() + 1);
return D;
}
/**
* добивает число нулями до двух позиций.
* 3 -> 03
* 13 -> 13
*/
function pad(n, len, char) {
var s = n.toString(10);
char = char || '0';
len = len || 2;
if( s.length >= len) return s;
return (Array(1+len).join(char) + n).slice(-len);
}
/**
* Выводит в заданный DOM-элемент время,
* оставшееся до даты-времени в объекте toDate
*/
function countdown( toDate, el) {
var diff = toDate.getTime() - new Date().getTime()
, H
, M
, S = Math.floor(diff/1000)
;
if( S <= 0) { // время прошло
el.innerText = "--:--:-- Ой, всё!";
return;
}
H = Math.floor(S/3600);
S = S % 3600;
M = Math.floor(S/60);
S = S % 60;
el.innerText = '' +pad(H) +':' +pad(M) +':' +pad(S);
setTimeout( countdown.bind(this, toDate, el), 111);
}
countdown(
parseTime('15:00:00'),
document.querySelector('h1.question__title')
);