第一百零一次闯荡江湖的无名游侠 - 2019年9月
js判断对象数组中是否存在某个对象
如果要判断数组中是否存在某个元素的话很好判断，直接用数组的indexOf方法就好，存在返回当前索引不存在返回-1var arr=[1,2,3,4] arr.indexOf(3) // 2 arr.indexOf(5) // -1要只是判断的话是可以遍历后判断对象的属性是否相同的，像这种：arr.forEach(item=>{ if(item.name=='Alex'){ alert('存在这个元素'); } })但实际中往往是需要动态添加或删除对象或元素的，用这个方法的话不好操作，可能会添加或删除掉多个，可以是用string的indexOf方法来判断const option = {name:'111'} // 如果数组里面本身不存在这个对象则把这个加进去 if(JSON.stringify(arr).indexOf(JSON.stringify(option))==-1){ arr.push(option); // 进行动态的操作 }这个判断是可以，但存在一个问题需要注意一下，如果对象的顺序不一样，是不能检测到重复的例如arr = [{name:'张三', sex:'男'}]option = {sex:'男', name:'张三'}利用上述方法检测的话，实际上该数组是存在这个数组对象的，但如果用string的indexOf方法是不能检测对的，用这个方法的时候这个点需要注意还有一个常用方法是设一个flag来做判断的标识let flag = true; let msg = ''; let arr = [] if(arr.length<6){ arr.forEach(item=>{ if(data.id===item.id){ // 对象里的唯一标识id msg = '请勿重复添加！' flag = false; } }) }else{ msg = '最多添加6个！' flag = false; } if(flag){ // 如果满足条件-数组长度小于6，当前添加的值在数组里不存在，就把值添加进去 arr.push(data) }else{ // 否则弹出提示信息 alert(msg) }利用数组API some来判断var result = arr.some(item=>{ if(item.name=='张三'){ return true } }) console.log(result) // 如果arr数组对象中含有name:'张三',就会返回true，否则返回false if(result){ // 如果存在 // do something }来自 https://www.cnblogs.com/leiting/p/9253461.html
链接: https://pan.baidu.com/s/1eBSqkT5iHViR0aMLrT3fPQ 提取码: xjdk 注：1、安装完office,不要打开2、点击安装‘激活工具’；会出现一把‘蓝色钥匙’，双击即可激活。来自 https://www.luofan.net/post/94.html
钩子定义钩子是编程里一个常见概念，非常的重要。它使得系统变得非常容易拓展，（而不用理解其内部的实现机理，这样可以减少很多工作量）。钩子作用钩子函数可以截获并处理其他应用程序的消息。每当特定的消息发出，在没有到达目的窗口前，钩子程序就先捕获该消息，亦即钩子函数先得到控制权。这时钩子函数即可以加工处理（改变）该消息，也可以不作处理而继续传递该消息，还可以强制结束消息的传递。钩子实现钩子的完整实现应该叫事件驱动。事件驱动分为两个阶段，第一个阶段是注册事件，目的是给未来可能发生的“事件”起一个名字，简单的实现方法是用单例模式产生一个持久的对象或者注册一个全局变量，然后将事件名称，以及该事件对应的类与方法插入全局变量即可。也就是挂载一个钩子。第二个阶段是触发事件，本质上就是在事件的全局变量中查询要触发的事件名称，然后找到注册好的类与方法，实例化并运行。这样子就可以摆脱传统方式中程序必须按顺序的规则，进一步实现解除耦合的目的。代码示例一class Ball{ public function down(){ echo "ball is downing "; //注册事件 Hook::add("man"); Hook::add("Women"); } public function do(){ Hook::exec(); } } // 钩子的定义 class Hook{ private $hooklist = null ; // 添加 public function add($people){ $this->hooklist[] = new $people(); } // 触发事件 public function exec(){ foreach($this->hooklist as $people){ $addon ->act(); } } } // 钩子实现 class man(){ public function act(){ echo 'notiong'; } } class WoMan(){ public function act(){ echo 'oh my god '; } } class child(){ public function act(){ echo 'oh my god '; } } $ball = new Ball(); $ball ->down(); $ball ->do();代码示例二// 如果需要添加小孩,就可以做添加一个小孩Hook::add("child"); /*=========================钩子的升级版============================================/* class Hook{ private $hookList; //添加 function add($name,$fun){ $this->hookList[$name][] = $fun; } function excec($name){ $value = func_get_args(); unset($value[0]); foreach ($this->hookList[$name] as $key => $fun) { call_user_func_array($fun, $value); } } } $hook = new Hook(); $hook->add('women',function($msg){ echo 'oh my god'.$msg ; }) $hook->add('man',function($msg){ echo 'nothing'.$msg ; }) // 执行 $hook->excec('man','taoge'); $hook->excec('women','xxx');来自：https://mp.weixin.qq.com/s/i8Gfp81CsewIJoJtBLJaRQ
服务器端【wkhtmltopdf】为实现截图的程序必须借助服务器端程序：http://code.google.com/p/wkhtmltopdf/可将网页转换为pdf或者图片，32和64位有区别，找个适合自己服务器的版本。安装安装过程十分简单：解压 -> 找个合适的路径放下…执行命令行调用 /servers/app/qtwebkit/wkHtmlToImage weibo.com weibo.com.png默认的清晰度比较高，图片会很大，生成图片需要一定的时间。phpexec('/servers/app/qtwebkit/wkHtmlToImage weibo.com weibo.com.png');具体的使用方法<?php ob_start(); //如果将输出的文件名设置为'-'，则直接返回文件数据流 passthru('/servers/app/qtwebkit/wkHtmlToImage --width 800 --height 600 -quality 85 weibo.com -'); $fileName = self::cachePath() . '/' . self::name(); $content = ob_get_clean(); //写入图片文件，备用 //file_put_contents($fileName, $content); //直接输出为图片 header("Content-type: image/png"); echo $content; ?>中文乱码问题主要看服务器是否支持中文语言，如果截图中出现乱码，直接装个中文包就好了。atp-get install fonts-chinesehttps://blog.csdn.net/myweishanli/article/details/9878739