0 = 0000 0000
1 = 0000 0001
2 = 0000 0010
3 = 0000 0011
4 = 0000 0100
5 = 0000 0101
6 = 0000 0110
7 = 0000 0111
8 = 0000 1000
9 = 0000 1001
3 = 0000 0011
означает 20 + 21 = 1 + 2 = 3.1 - бит 0 - notify
2 - бит 1 - friends
4 - бит 2 - photos
8 - бит 3 - audio
12 = 0000 0000 0000 1100
return +a[attr] > +b[attr] ? 1: -1;
return +a[attr] - b[attr];
const sortFunc = function sortFunc(data, elem) {
switch( elem.getAttribute('name')) {
case 'id':
case 'salary':
data.sort((a, b) => +a[attr] - b[attr]);
break;
case 'user':
case 'position':
case 'gender':
data.sort((a, b) => a[attr] > b[attr] ? 1 : (a[attr] < b[attr] ? -1 : 0));
break;
default:
throw('Bad attribute');
}
};
00 01 02
10 11 12
20 21 22
00 : 0+0 = 0
10, 01 : 1+0 = 0+1 = 1
20, 11, 02: 2+0 = 1+1 = 0+2 = 2
var arr = [
'o,x,x'.split(','),
'x,o,o'.split(','),
'o,x,o'.split(','),
];
var r, c, key, diags = {};
for(r = 0; r < arr.length; r++) {
for(c = 0; c < arr[r].length; c++) {
key = r + arr[r].length - 1 - c; // слева сверху вправо вниз
// key = r + c; // слева снизу вправо вверх
if( diags.hasOwnProperty(key)) {
if( diags[key] !== arr[r][c]) diags[key] = false;
} else {
diags[key] = arr[r][c];
}
}
}
for( key in diags) if( diags[key] === false) delete diags[key];
// {"0":"x","2":"o","3":"x","4":"o"}
user_params()
отработает сразу и вернет null. А ответ от ВК будет получен когда-то потом и попадёт во вложенную функцию.function user_params(id, param, callback) {
vk('users.get', {user_ids: id, fields: param}, function(error, response){
if (error) {
console.log(error);
} else callback(response[0][param]);
});
};
function roundTS(ts) {
var D = new Date(ts);
var m = 15 + Math.ceil( D.getMinutes() / 15);
D.setMinutes(m);
return D.getTime();
}
function roundMinArr( D, arr) {
var i, m = D.getMinutes();
arr.sort((a,b)=>a-b);
for(i in arr) {
if( arr[i] < m) continue;
D.setMinutes(arr[i]);
return D;
}
D.setMinutes(60 + arr[0]);
return D;
}
var D = roundMinArr( new Date('2017-08-16T12:17+03:00'), [0,15,35,44,59]);
D.toString() // Wed Aug 16 2017 12:35:00 GMT+0300 (MSK)
this.a=[
new Audio('https://wav-library.net/sfx/mix/LightSwitch.mp3'),
new Audio('https://wav-library.net/prmusic/rock/Run.mp3')
];
this.f=()=>{ // это будет новый обработчик клика
var cc=!!this.cc; // для краткости записи
this.a[+!cc].pause(), // если предыдущий длинный играет - стоп его!
this.a[+!cc].currentTime=0, // ..и перемотать на начало.
a[+cc].play(), // играть новый
this.cc=!cc // переназначить счётчик ( true | false )
};
this.onclick=this.f, // переназначить хэндлер клика
this.f() // вызвать для первого клика принудительно
<td onclick="this.a=[ new Audio('https://wav-library.net/sfx/mix/LightSwitch.mp3'), new Audio('https://wav-library.net/prmusic/rock/Run.mp3')];
this.f=()=>{var cc=!!this.cc;this.a[+!cc].pause(),this.a[+!cc].currentTime=0,a[+cc].play(),this.cc=!cc};
this.onclick=this.f,this.f()">click me!</td>
function getById( obj, id) {
var i, found;
if( obj.id === id) return obj;
if( obj.hasOwnProperty('childGroups')) {
for( i in obj.childGroups) {
if( found = getById( obj.childGroups[i], id)) return found;
}
}
return;
}
getById( obj,3) // {"id":3,"parentId":1,"childGroups":[{"id":6,"parentId":3},{"id":7,"parentId":3}]}
image.png|image.jpg|image.gif|audio.mp3