一、數組亂序html
function shuffle(arr){ var len = arr.length, temp; for(var i=0,rand;i<len;i++){ rand = i + ~~(Math.random()*(len - i)); temp = arr[i]; arr[i] = arr[rand]; arr[rand] = temp; } return arr; } console.log(shuffle([5,4,0,1,2,7]));
因爲使用sort加Math.random()*0.5實現的排序亂序有很大機會在同一個位置出現的概率比較高,並且每一個位置的概率都不平均。mongodb
而以上的實現能夠證明比較優的方法。json
數學概括法:api
證實: i/(i+1)*(i-1/i)...2/3*1/2 = 1/(i+1)數組
一、n=2時,替換概率爲1/2,不替換爲1/2.安全
二、n=i,i>2時,每一個位置替換與不替換的概率爲1/i.dom
三、n=i+1,i+1>2時,每一個位置替換與不替換的概率爲1/(i+1),而假設每一個與最後一個替換的機率爲1/(i+1),那麼最後一個與每一個不替換的機率就是mongoose
i/(i+1),那麼循環每個與最後一位替換,第一次的不替換爲i/(i+1),第二次就爲i,並且根據2假設,每個位置不替換爲1/i,那麼循環i次爲 i/(i+1)*1/i=1/(i+1)atom
二、多行省略號spa
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .mutil-line-ellipsis { width: 400px; height: 50px; line-height: 25px; margin: 20px 20px 50px 300px; border: 5px solid #AAA; line-height: 25px; overflow: hidden; } /*至關於以前的prop*/ .mutil-line-ellipsis:before { content: ''; float: left; width: 5px;/*縮小寬度爲5px,其他屬性不變*/ height: 50px; } /*至關於以前的main*/ .mutil-line-ellipsis > :first-child { float: right; width: 100%; margin-left: -5px;/*讓main元素左移5px,這樣main元素在寬度上就徹底佔滿了父元素;*/ word-break: break-all; } /*至關於以前的realEnd*/ .mutil-line-ellipsis:after { content: '...'; box-sizing: content-box; float: right; position: relative; width: 50px; height: 25px; top: -25px; /*等於高度的負值,就是文字的行高*/ left: 100%; /*而設置margin-left: -50px、padding-right: 5px則是爲了讓realend元素的盒模型的最終寬度計算爲5px。*/ margin-left: -50px; padding-right: 5px; font-size: 13px; text-align: right; background: linear-gradient(to right, rgba(255, 255, 255, 0), #ffffff 40px); } </style> </head> <body> <div class="mutil-line-ellipsis"> <div> 2.main 這裏是要多行文本溢出省略的,內容多一點,內容多一點,內容多一點,內容多一點 內容多一點,內容多一點,內容多一點,內容多一點,內容多一點,內容多一點 </div> </div> </body> </html>
巧妙使用了relative、margin-left、float,首先使用before擠出5px,而後margin-left:-5px佔回去,並且width:100%,那麼右邊就會出現一點點空間讓after佔着當內容溢出時,而...爲英文默認不換行,那麼
就實現了內容溢出出現省略號了。
固然裏面還有不少有意思的樣式。
三、mongoose-update
更新子文檔內容,
如如下,因爲cartList爲數組結構,因此cartList.$.productNum更新到具體某個位置的值,而$爲佔位符,表明某一行數據下的productNum數據更新
參數:
條件 «Object»
更新內容 «Object»
[操做參數] «Object» 參考https://mongoosejs.com/docs/api.html#query_Query-setOptions
[回調] «Function»
例子:
User.update({"userId":userId,"cartList.productId":productId},{
"cartList.$.productNum":productNum,
"cartList.$.checked":checked,
}, function (err,doc) {
if(err){
res.json({
status:'1',
msg:err.message,
result:''
});
}else{
res.json({
status:'0',
msg:'',
result:'suc'
});
}
})
刪除某一條信息,使用update與原子操做$pull實現,先查詢到而後刪除符合條件的子文檔
$pull刪除符合條件的內容
User.update({
userId:userId
},{
$pull:{
'cartList':{
'productId':productId
}
}
}, function (err,doc) {
if(err){
res.json({
status:'1',
msg:err.message,
result:''
});
}else{
res.json({
status:'0',
msg:'',
result:'suc'
});
}
})
序列化
將對象的狀態信息轉換爲能夠存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。之後,能夠經過從存儲區中讀取或反序列化對象的狀態,從新建立該對象。可序列化的對象在安全上須要注意。