Как проверить вхождение элемента в список? Документация
List = [1,2,3,4,5,6],
lists:member(1,List) => true
lists:member(8,List) => false
List = [1,2,3,4,5,6],
lists:member(1,List) => true
lists:member(8,List) => false
Основная задача блога - стать стартовой платформой для начинающих разработчиков, здесь не только буду писать свои статьи, но также буду выкладывать полезные ссылки которые помогут разобраться в разных вопросах. Будут затронуты темы: Ruby on Rails, PHP, MySQl, CodeIgniter, JQuery.
gproc:select({global,all},[{'_',[],['$$']}]).
[[{p,g,foo},<0 .37.0="">,bar]]
gproc:select({local,all},[{'_',[],['$$']}]).
[[{p,l,foo},<0 .37.0="">,bar]]
gproc:select({all,all},[{'_',[],['$$']}]).
[[{p,g,foo},<0 .37.0="">,bar],[{p,l,foo},<0 .37.0="">,bar]]
...
,{alog, [
{enabled_loggers, [alog_tty, alog_disk_log]},
{install_error_logger_handler, true},
{flows, [
{{mod, ['_']}, {'=<', debug}, [alog_tty, alog_disk_log]}
]},
{alog_tty, []},
{alog_disk_log, [{name, alog_disk_log},
{file, "filename.log"},
{format, external},
{type, wrap},
{size, {1073741824, 10}}
]}
]}
...
{type, wrap} - включает ротацию логов
{size, {FileSize, FileCount}} - тут понятно: размер и количество файлов
str.match(/.{1,N}/g);
str = 'qwertyuiopasdfghjklzxc';
str.match(/.{1,10}/g);
Результат: ["qwertyuiop", "asdfghjklz", "xc"]
str = 'qwertyuiopasdfghjklzxc';
str = '1234567890';
n = 5;
re = new RegExp(".{1,"+n+"}", "g");
str.match(re);
Результат: ["12345", "67890"]
$ sudo mc
$ gksu gedit
Сервер он вам ответит приблизительно так:
ejabberd 2.1.10 unix/linux 3.2.0
var obj = {
field: 'value',
fnTest: function(){
return 'res: '+ this.field;
}
};
// Использование:
console.log( obj.field ); // 'value'
console.log( obj.fnTest() ); // 'res: value'
Если нам нужна предварительная инициализация, то добавим некий метод init, который может устанавливать значение полей объекта:
var obj = {
field: 'value',
options: {},
init: function(o){
this.options = $.extend(true, {}, o);
},
fnTest: function(){
return this.field;
}
};
// Использование:
obj.init({o:4,test:2});
console.log( obj.options ); //{o:4,test:2}
Этого функционала, в большинстве случаев, должно хватить, но бывает нужен и синглетон (Singleton): например важно иметь приватные данный и методы (статический класс полностью публичен)
Один из демонстрационных вариантов реализации синглетона :
var cSingleton = (function(){
// Class instance:
var _instance = null;
// Private:
var test = 1;
var options = {};
var fnPrivate = function(){
// some code
}
// Constructor:
function Init(o){
options = $.extend(true, options, o || {});
}
// Public:
Init.prototype = {
pub: 0,
fnTest: function(){
return test;
},
getOptions: function(){
return options;
}
}
return function(args){
if(!_instance){
_instance = new Init(args);
}
return _instance;
}
}());
ob = new cSingleton({x:1});
console.log('1:', ob.fnTest());
console.log('opts:', ob.getOptions());
ob2 = new cSingleton({x:2});
console.log('2:', ob2.fnTest());
console.log('opts:', ob.getOptions());
// Результат:
1: 1
opts: Object { x=1}
2: 1
opts: Object { x=1}
Так мы гарантируем, что класс вернет только одно значение. Возможно это и "синтетическая" задача, но возможно кому-то и пригодиться
jQuery.fn.reverseEach = (function () {
var list = jQuery([1]);
return function (c) {
var el, i=this.length;
try {
while (i-->0 && (el=list[0]=this[i]) && c.call(list,i,el)!==false);
}
catch(e) {
delete list[0];
throw e;
}
delete list[0];
return this;
};
}());
$("li.classname").reverseEach(function(){
// this сразу содержит объект jQuery
console.log( 'id:', this.attr('id') );
//return false; - Если в каком-то случае вернем false - обход прервется в этом месте
});
Если нужно поведение аналогичное .each(), когда к элементу обращаемся через $(this),
нужно заменить 13 строчку на:
return this.get(0); // Вместо: return this;
=VALUE(SUBSTITUTE((SUBSTITUTE(INDEX(ImportHTML("http://finance.yahoo.com/q?s=USDUAH=X";"table";1); 1;2);"*";""));".";","))
var list = $("ul li");
list.each(function() {
var el = $(this); // получаем объект jQuery из объекта DOM
el..... // Какое-то действие с объектом
});
/**
* jQuery quick Each
*
* Example:
* a.quickEach(function() {
* this; // jQuery object
* });
*/
jQuery.fn.quickEach = (function() {
var jq = jQuery([1]);
return function(c) {
var i = -1, el, len = this.length;
try {
while (++i < len && (el = jq[0] = this[i]) && c.call(jq, i, el) !== false);
} catch (e) {
delete jq[0];
throw e;
}
delete jq[0];
return this;
};
}());
Пример использования:
// Стандартный итератор
list.each(function() {
var el = $(this);
});
// Оптимизированный итератор:
list.quickEach(function() {
var el = this; // jQuery object
});
Оригинальная статья находиться по адресу http://jsperf.com/jquery-each-vs-quickeach, где также можно ознакомиться с результатами замеров производительности обоих методов.
String.prototype.like = function(s) {
if(undefined==s || typeof(s)!='string') return false;
function replacer(str, p1, p2) {
if(p1=='\\') return p2;
if(p2=='%') return p1+'.+';
return p1+'\\w';
}
var pattern = "^"+s.replace(/(.|^)([%_])/gm, replacer)+'$';
var re = new RegExp(pattern, 'mg');
if(this.match(re)) return true;
return false;
};
var s = "Test string";
console.log( s.like("%ing") ); // True
console.log( s.like("%in") ); // False
console.log( s.like("%in_") ); // True
console.log( s.like("Test%") ); // True
console.log( s.like("%str%") ); // True
console.log( s.like("%spr%") ); // False
console.log( s.like("%s_r%") ); // True
var isHashSubset = function(a, b){
var f = true;
for(var id in b){
if(b.hasOwnProperty(id)){
if(!((undefined!=a[id])&&(undefined!=b[id])&&(b[id]==a[id]))){
f = false;
}
}
}
if(!f){
f = true;
for(var id in a){
if(a.hasOwnProperty(id)){
if(!((undefined!=a[id])&&(undefined!=b[id])&&(b[id]==a[id]))){
f = false;
}
}
}
}
return f;
}
var x = {'key1':'val1','key2':'val2', 'key3':'val3'};
var y = {'key1':'val1','key2':'val2'};
console.log('Result:', isHashSubset(x,y) ); // TRUE
console.log('Result:', isHashSubset(y,x) ); // TRUE
var x = {'key1':'val1','key2':'val2', 'key3':'val3'};
var y = {'key1':'val1','key4':'val4'};
console.log('Result:', isHashSubset(x,y) ); // FALSE
console.log('Result:', isHashSubset(y,x) ); // FALSE
(!((undefined!=a[id])&&(undefined!=b[id])&&(b[id]==a[id]))) использовать: (!((id in a)&&(id in b)&&(b[id]==a[id])))
var isHashSubset = function(a, b, c){
var f = true,
c = c || 0; // количество рекурсивных вызовов
for(var id in b){
if( b.hasOwnProperty(id) && !( undefined!=a[id] && undefined!=b[id] && b[id]==a[id] ) ){
f = false;
}
}
return (!f && c == 0) ? isHashSubset(b, a, 1) : f;
}
SELECT `id`, DATE_FORMAT(`time`, '%Y-%m-%d %H:%i') as `dt`, avg(val) as `value` FROM `table` GROUP BY `id`, time_to_sec(`time`)- time_to_sec(`time`)%(60*60) ORDER BY `dt` DESC