false
и число 0
, которые не будем считать пустым значением.var data = {1: "", 2: "123", 3:""};
function anyEmpty(obj) {
var p, v;
for( p in obj) {
v = obj[p];
if( !obj.hasOwnProperty(p)) continue;
if( v === false || v === 0) continue;
if( !v ) return true;
}
return false;
}
anyEmpty(data) // true
+ - * /
хотя надо бы ещё и скобки разрешить и расширить список другими валидными операторами и методами..eval( "var result = " + math + ";" )
function calc() {
var result, math = $('.calc').val();
if( math.trim().match(/[^0-9\.\*\/+\-\(\)%&~]/)) {
result = "недопустимые символы";
} else {
try { eval ('result = ' + math + ';') }
catch(e) { result = "плохая формула" }
}
$('#out').text( result);
}
$('.calc').on('input', calc);
calc();
input
(любое изменение) на элементе <input>
и копировать value
input'а в innerHTML
div'а:var src = document.getElementById("in-text"),
dst = document.getElementById("b-out");
src.addEventListener('input', function(){ dst.innerHTML = src.value });
function isInRange( v, ranges) {
var i, pair;
for( i = 0; i < ranges.length; i++) {
pair = ranges[i];
if( v > pair[0] && v < pair[1]) return true;
}
return false;
}
if( false === isInRange( Y, arY)) console.log( Y, "not in range");
arY.reduce((p,c) => (p || (Y<c.pop() && Y>c.pop())), false)
var src = ["груша", "яблоко", "апельсин", "груша", "банан", "груша", "апельсин"];
var dict = src.reduce( function(p,c){
if( p.hasOwnProperty(c)) p[c]++;
else p[c] = 1;
return p;
}, {});
// теперь нужно вывести dict в порядке убывания значений:
// создать массив объектов с двумя полями: слово и число
// и отсортировать его по убыванию поля с числом.
var arr = [], word;
for( word in dict) arr.push({ w: word, n: dict[word] });
arr.sort( function(a,b){ return b.n - a.n });
// массив arr теперь отсортирован правильно, осталось вывести:
for( var i = 0; i < arr.length; i++) console.log( arr[i].w +' - '+ arr[i].n );
A.then(B).then(C)
:$("#button").click( animate );
function animate() {
number1().then( number2).then( number3);
}
function number1() { // асинхронная, вернет промис
return $('p').each( function(i) { $(this).delay((i++) * 500).fadeTo(2000, 1)} )
.promise();
}
function number2() { // асинхронная, вернет промис
return $('p').hide("fast").promise();
}
function number3() { // выполнится мгновенно
$('#result').html("Hello World");
}
complete
$("#button").click( number1 );
function number1() {
var $p = $('p'), len = $p.length;
$p.each(function(i) {
$(this).delay((i++) * 500).fadeTo(2000, 1, function(){
if(i===len) $( "p" ).hide( "fast", number2); // выполнить только для последнего из всех
});
})
}
function number2() {
var number2func = document.getElementById('result');
number2func.innerHTML = "Hello World";
}
$(".image-portfolio").on( 'click', function(){
window.dispatchEvent(
new CustomEvent( 'sect', { detail: $(this).data("section")} )
);
});
// где-то далеко далеко ловим данные из события
window.addEventListener('sect', function(e) {
$('body').append('<div>кликнули на ' + e.detail + '</div>');
});
function trimmer(n) {
var s = n.toString(), pos = s.indexOf('.');
return parseFloat( s.substr( 0, !!~pos ? pos+4 : s.length));
}
trimmer(32.0123456) // 32.012
trimmer(32.000000001) // 32
trimmer(32.1000000001) // 32.1
trimmer(32) // 32
trimmer(.001) // 0.001
trimmer(32.987654) // 32.987
trimmer(32.9999999999) // 32.999
parseFloat( (32.3).toFixed(3)) // 32.3
parseFloat( (32.12345).toFixed(3)) // 32.123
parseFloat( (32.98765).toFixed(3)) // 32.988
parseFloat( (32.99999).toFixed(3)) // 33
<div>
с каким-то содержимым, которое вы хотите «закодировать».function encode(s) {
var i, out = [];
for(i=0;i<s.length;i++) out.push(s.charCodeAt(i));
return out.join('!');
}
var button = document.getElementById('btn');
function f1() {
button.disabled = true;
button.onclick = todo.shift(); // заменили обработчик на следующий из очереди
var timeoutID = setTimeout( /* запуск таймера */
function() { button.disabled = false},
1000
);
}
var todo = []; // очередь одноразовых задач
todo.push(f1,f1,f1); // три раза f1, потом добавьте "другие" - f2, f3
button.onclick = todo.shift(); // зарядить первую
list-group-item
:document.body.addEventListener('click', function(e) {
if( e.target.classList.contains('list-group-item'))
e.target.style.backgroundColor = 'red';
});
<body>
можно повесить слушателя ниже, например, на <ul>
, чтобы ловить события только в его дочерних элементах (и глубже). for(let key,i=0;i<localStorage.length;i++) key=localStorage.key(i),console.log(key,':', localStorage.getItem(key));
const L=localStorage;for(let k,v,i=0;i<L.length;i++) {k=L.key(i);try{v=JSON.parse(L.getItem(k)).name}catch(e){};console.log(k,' => ',v)}
function pairs( arr) {
var result = {};
for( var i = 1; i<arr.length; i+=2) result[ arr[i-1]] = arr[i];
return result;
}
pairs(["item1","black","item2","black","item3","black","item4","black","item5","black"]) // {
"item1": "black",
"item2": "black",
"item3": "black",
"item4": "black",
"item5": "black"
}