數組亂序、多行省略號、mongoose-update

一、數組亂序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'
      });
    }
  })

MongoDB 原子操做

 

序列化

將對象的狀態信息轉換爲能夠存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。之後,能夠經過從存儲區中讀取或反序列化對象的狀態,從新建立該對象。可序列化的對象在安全上須要注意。

相關文章
相關標籤/搜索