摘要:兩個數組內的元素相加第二種考慮兼容一個數組插入到另一個數組通過方法將一個數組插入到另外一個數組數字排序的函數在默認情況下使用字母數字字符串碼點排序。它們具有不同的引用,無法用相比較。
最后更新于2019年1月13日
前端常用代碼片段(一) 點這里
前端常用代碼片段(二) 點這里
前端常用代碼片段(三) 點這里
前端常用代碼片段(四) 點這里
前端常用代碼片段(五) 點這里
前端常用代碼片段(六) 點這里
方法1: (ES5)
function unique(a) { var res = []; for (var i = 0, len = a.length; i < len; i++) { var item = a[i]; (res.indexOf(item) === -1) && res.push(item); } return res; } var a = [1, 1, "1", "2", 1]; var ans = unique(a); console.log(ans); // => [1, "1", "2"]
或
function unique(a) { var res = a.filter(function(item, index, array) { return array.indexOf(item) === index; }); return res; } var a = [1, 1, "1", "2", 1]; var ans = unique(a); console.log(ans); // => [1, "1", "2"]
方法2: (ES6)
Set 以及 Array.from 方法:
function unique(a) { return Array.from(new Set(a)); } var a = [{name: "hanzichi"}, {age: 30}, new String(1), new Number(1)]; var ans = unique(a); console.log(ans); // => [Object, Object, String, Number]2.數組不是原始數據類型
typeof {} === "object" // true typeof "a" === "string" // true typeof 1 === number // true // But.... typeof [] === "object" // true
如果你想知道你的變量是不是數組,你仍然可以用Array.isArray(myVar)
原始數據 (原始值、原始數據類型)不是一種 object 類型并且沒有自己的方法的。在 JavaScript 中,有六種原始數據類型:string,number,boolean,null,undefined,symbol (new in ECMAScript 2015)。
3.兩個數組內的元素相加var a = [1,2,3,4,3]; var b = [4,5,6,7]; var c = a.map(function(v, i){ return v + (b[i] || 0); }); console.log(c); 第二種考慮兼容 var a=[1,2,3,4,5]; var b=[6,7,8,9]; var c=[]; for (var i=0;i4.一個數組插入到另一個數組 通過Array.prototype.push.apply方法將一個數組插入到另外一個數組
var a = [1,2,3]; var b = [4,5,6]; Array.prototype.push.apply(a, b); console.log(a); // [1, 2, 3, 4, 5, 6]5.數字排序Javascript 的sort()函數在默認情況下使用字母數字(字符串Unicode碼點)排序。
所以
[1,2,5,10].sort() //會輸出 [1, 10, 2, 5]要正確的排序一個數組, 你可以用
[1,2,5,10].sort((a, b) => a?—?b) //會輸出 從小到大排序 [1, 2, 5, 10]從大到小排序即
[1,2,5,10].sort((a, b) => b-a)6.replace替換字符串let s = "bob" const replaced = s.replace("b", "l") replaced === "lob" s === "bob"我覺得這是一件好事,因為我不喜歡函數改變它們的輸入。 你還應該知道 replace 只會替換第一個匹配的字符串:
如果你想替換所有匹配的字符串,你可以使用帶/g標志的正則表達式 :
"bob".replace(/b/g, "l") === "lol" // 替換所有匹配的字符串7. 比較的時候要注意// These are ok "abc" === "abc" // true 1 === 1 // true // These are not [1,2,3] === [1,2,3] // false {a: 1} === {a: 1} // false {} === {} // false原因:[1,2,3]和[1,2,3]是兩個獨立的數組。它們只是恰好包含相同的值。它們具有不同的引用,無法用===相比較。
8. 閉包const Greeters = [] for (var i = 0 ; i < 10 ; i++) { Greeters.push(function () { return console.log(i) }) } Greeters[0]() // 10 Greeters[1]() // 10 Greeters[2]() // 10你是不是認為它會輸出 0, 1, 2… ? 你知道它為什么不是這樣輸出的嗎? 你會怎樣修改讓它輸出 0, 1, 2… ?
這里有兩種可能的解決方法:
用 let 替代 var. Boom. 解決了.
let和var的不同在于作用域。var的作用域是最近的函數塊,let的作用域是最近的封閉塊,封閉塊可以小于函數塊(如果不在任何塊中,則let和var都是全局的)。(來源)替代方法: 用 bind:
Greeters.push(console.log.bind(null, i))9.當點擊 復制 按鈕的時候, 將選中的文字復制到粘貼板上function clickBtn(){ // 獲取 input 元素 var input = document.querySelector("#copytest"); //或 var input = document.getElementById("copytest"); input.focus(); input.select(); // 執行復制命令 document.execCommand("Copy") }核心代碼 document.execCommand() 方法, 該方法的大概用途是 對選中區域 進行一些操作
10.JS獲取textarea中剩余字數html部分:
剩余可輸入600字
js部分:
function changeLength(obj,num){ obj.on("keyup",function(){ var txtval = obj.val().length; //console.log(txtval); var str = parseInt(600-txtval); //console.log(str); if(str > 0 ){ num.html("剩余可輸入"+str+"字"); }else { num.html("剩余可輸入0字"); obj.val(obj.val().substring(0, 600)); } //console.log($("#num_txt").html(str)); }); } $(function(){ //我這里有四個,所以調用4次 changeLength($("#text_txt1"),$("#num_txt1")); changeLength($("#text_txt2"),$("#num_txt2")); changeLength($("#text_txt3"),$("#num_txt3")); changeLength($("#text_txt4"),$("#num_txt4")); });11.js中的點擊事件//html var btn=document.getElementById("btn");//js 第一種: btn.onclick=function(){ alert("hello world"); } //消除事件 btn.onclick=null;//就不會彈出框了//js 第二種: btn.addEventListener("click",function(){ alert("hello world") },false); btn.addEventListener("click",function(){ alert(this.id) },false);//js 第三種: function demo(){ alert("hello"); }js觸發按鈕點擊事件
模擬JS觸發按鈕點擊功能12.清除浮動clearfix一種寫法(stylus)usually function //備注: //btnObj.click()是真正地用程序去點擊按鈕,觸發了按鈕的onclick()事件 //btnObj.onclick()只是簡單地調用了btnObj的onclick所指向的方法, //只是調用方法而已,并未觸發事件.clearfix display :inline-block &:after display :block content:"." height:0 line-height: 0 clear :both visibility :hidden13.星星評分計算很多商品評價中都會涉及評分,再根據評分計算星星個數
現介紹一種方法:
每個都是單個星星,分為三種.png圖
const LENGTH = 5;//星星個數 const CLS_ON = "on";//全部選中星星的classNmae const CLS_HALF = "half";//半個選中的classNmae const CLS_OFF = "off";//未選中的classNmae let result = []; let score = Math.floor(this.score * 2) / 2; //計算評分,如4.7會計算成4.5分,4.3會計算成4分 let hasDecimal = score % 1 !== 0; //計算是否存在半顆星 let integer = Math.floor(score); //計算有幾個完全選中的星星 for (let i = 0; i < integer; i++) { result.push(CLS_ON);//數組中添加全部選中星星的classNmae }; if (hasDecimal) { result.push(CLS_HALF);//數組中添加半顆星星的classNmae }; while (result.length < LENGTH) { result.push(CLS_OFF);//數組中補充未點亮星星的classNmae }; return result;//返回數組14.關閉頁面彈框提示類似下圖效果
window.onbeforeunload=function (){ var warning = "請確認保存后再退出哦!"; return warning; } //注:現在不能彈出自定義的信息,暫時不知道原因, //后續會追蹤這個問題(如果你知道可以留下評論) //關閉頁面時的一些清楚緩存,ajax退出登錄等操作可以寫在函數里15.封裝jsonpimport originJSONP from "jsonp" // 封裝的 jsonp 函數 export default function jsonp(url, data, options) { url += (url.indexOf("?") < 0 ? "?" : "&") + param(data) return new Promise((resolve, reject) => { originJSONP(url, options, (err, data) => { if(!err) { resolve(data) } else { reject(err) } }) }) } // url 拼接函數 function param(data) { let url = "" for(let k in data) { let value = data[k] !== undefined ? data[k] : "" url += `&${k}=${encodeURIComponent(value)}` } return url ? url.substring(1) : "" }16.firefox 加入toolTip提示信息后 頁面抖動在firefox中 默認頁面不超過一頁是沒有滾動條的 加入頁面中某些元素會臨時改變頁面高度 比如用了toolTip 之類的提示小工具 就會出現滾動條時有時無 導致頁面抖動解決方法: 添加css代碼
body{ overflow: -moz-scrollbars-vertical; }17.判斷游覽器內核,自動添加前綴實現css屬性兼容let elementStyle = document.createElement("div").style // 主流瀏覽器內核 let vendor = (() => { let transfromNames = { webkit: "webkitTransform", Moz: "MozTransform", ms: "msTransform", O: "OTransform", standard: "transform" } for (let key in transfromNames) { if (elementStyle[transfromNames[key]] !== undefined) { return key } } return false })() // 添加樣式的瀏覽器前綴 export function prefixStyle(style) { if (vendor === false) { return false } if (vendor === "standard") { return style } return vendor + style.charAt(0).toUpperCase() + style.substr(1) }18.添加className// 為元素添加類名 export function addClass(el, className) { // 先判斷一下元素是否含有需要添加的類名,有則直接 return if (hasClass(el, className)) { return } // 把該元素含有的類名以空格分割 let newClass = el.className.split(" ") // 把需要的類名 push 進來 newClass.push(className) // 最后以空格拼接 el.className = newClass.join(" ") } // 判斷是否有要查看的 className,有則返回true,否則返回 false export function hasClass(el, className) { let reg = new RegExp("(^|s)" + className + "(s|$)") return reg.test(el.className) }19.獲取或設置data- 屬性export function getData(el, name, val) { const prefix = "data-" name = prefix + name if (val) { return el.setAttribute(name, val) } else { console.log("el.getAttribute(name)", el.getAttribute(name)) return el.getAttribute(name) } }20.基于jq的datatables(兼容ie8)基本配置描述:采用基于jq的datatables(兼容ie8) 主要功能:基本配置,服務端分頁,清楚緩存,刷新等 /************************表格刷新*****************************/ $("#searchFormBtn").click(function () { tablebyGroup.ajax.reload(); }); function queryUserByGroup() { tablebyGroup = $("#workArr").DataTable({ destroy: true, serverSide: true, //啟用服務器端分頁 searching: false, //禁用原生搜索 orderMulti: false, //啟用多列排序 order: [], //取消默認排序查詢,否則復選框一列會出現小箭頭 renderer: "bootstrap", //渲染樣式:Bootstrap和jquery-ui pagingType: "simple_numbers", //分頁樣式:simple,simple_numbers,full,full_numbers iDisplayLength:100, ajax: function (data, callback, settings) { var selected = $("#selectWorkArr").val(); var param = { depId: parseInt(selected), docId: JSON.parse($.cookie("userinfo")).docId }; //ajax請求數據 $.ajax({ type: "post", url: serverIp + "rest/doctor/selectWorkGroup?" + Math.random() + "&" + maiyaBuildParam(param), cache: false, //禁用緩存 // data: JSON.stringify(param), //傳入組裝的參數 // contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { var returnData = {}; returnData.draw = data.draw;//這里直接自行返回了draw計數器,應該由后臺返回 returnData.recordsTotal = result.data.length;//返回數據全部記錄 returnData.recordsFiltered = result.data.length;//后臺不實現過濾功能,每次查詢均視作全部結果 returnData.data = result.data;//返回的數據列表 //調用DataTables提供的callback方法,代表數據已封裝完成并傳回DataTables進行渲染 //此時的數據需確保正確無誤,異常判斷應在執行此回調前自行處理完畢 callback(returnData); }, error: function(msg) { alert(msg.message || "查詢失敗") } }); }, bFilter: false,//去掉搜索框方法 bLengthChange: false, //去掉每頁顯示多少條數據方法 "ordering": false,//禁止排序 "columns": [ {"data": "pName"}, {"data": "pSex"}, {"data": "strBirthDate"}, {"data": "pCardNum"}, {"data": "pPhone"}, {"data": "cName"}, {"data": "pActivited"} ], paging: false, "columnDefs": [{ "render": function(data, type, row, meta) { //渲染 把數據源中的標題和url組成超鏈接 return ""+data+""; }, //指定是第1列 "targets": 0 },{ "render": function(data, type, row, meta) { return data == 1 && "男" || "女"; }, //指定是第1列 "targets": 1 },{ "render": function(data, type, row, meta) { return data == 1 && "已注冊" || "未注冊"; }, //指定是第1列 "targets": 6 }] }); }引用:誰說Javascript簡單的? – Hacker Noon
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83373.html
摘要:本文總結的代碼片段六持續更新前端常用代碼片段一點這里前端常用代碼片段二點這里前端常用代碼片段三點這里前端常用代碼片段四點這里前端常用代碼片段五點這里前端常用代碼片段六點這里多彩的傳入和變量本節參考文章多彩的版本號比較和和本節參考文章 本文總結的代碼片段(六)--持續更新 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點...
摘要:盡量避免使用表達式又稱動態屬性。使用計算數組中的重復項如果你想計算數組中的每個值有多少重復值,也可以快速幫到你。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 1.簡述一下你對HTML語義化的理解?并寫出一段語義化的HTML? 語義化是指根據內容的結...
最后更新于2019年1月13日 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 大部分需要引入 jquery-1.9.1.min.js(兼容ie8) 1.回車觸發事件的代碼 $(function(){ $(#username).focus(...
摘要:當運行時,如果不為,則將超時函數推送到事件隊列,并且函數退出,從而使調用堆棧清零。因此,該方法從頭到尾不經過直接遞歸調用即可處理,因此調用堆棧保持清晰,無論迭代次數如何。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里 1.tap事件點透問題? 問題點擊穿透問題:點擊蒙層(mask)上的關閉按鈕,蒙層消失后發現觸...
摘要:可以是數字或者是字符串如果是數字則表示屬性名前加上空格符號的數量,如果是字符串,則直接在屬性名前加上該字符串。 最后更新于2019年1月13日 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 1.打亂數組中元素順序(類似音樂隨機播放) function...
閱讀 1936·2021-11-15 17:58
閱讀 2131·2021-10-19 11:45
閱讀 3482·2021-09-02 15:40
閱讀 2595·2021-07-25 10:50
閱讀 3745·2019-08-30 15:56
閱讀 3146·2019-08-30 12:44
閱讀 1028·2019-08-26 13:38
閱讀 1869·2019-08-23 18:29