1.2022-01-21(聚餐的日子)
1.radio单选框的自定义样式
思路:根据label标签来展示需要的样式,隐藏原来的input里面的样式
<div class="radio">
<input id="click_me" type="radio" name="radio" value="click_me" v-model="checked">
<label for="click_me">Click_me</label>
<input id="or_me" type="radio" name="radio" value="or_me" v-model="checked">
<label for="or_me">Or_me</label>
</div>
.radio label {
background: #fff;
border: 1px solid #ddd;
padding: .5rem 1.25rem;
border-radius: 5px;
cursor: pointer;
color: #444;
-webkit-transition: box-shadow 400ms ease;
transition: box-shadow 400ms ease;
}
.radio label:hover {
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
}
.radio input[type="radio"] { //隐藏原来属性
display: none;
}
.radio input[type="radio"]:checked+label { //点击label的选中样式
background: #2196F3;
color: #fff;
border-color: #2196F3;
}
效果
1.2022-01-12(努力工作的日子)
var arr1 = Object.assign([], globalVariable['alreadyList']);//浅拷贝或者深拷贝 没理解透 但是很重要
var arr2 = $.merge(arr1, arr3)//合并数组 arr1 和 arr3;此时arr1也会变成合并的新数组;
var opt = $.inArray('xx',arr1) //返回xx在数组arr1的位置,不存在则返回-1
1.2022-01-10(发工资的日子)
1.1vue简单过滤器、v-for用法
<div v-if="books.length>0">
<table border="1">
<thead>
<th>书名</th>
<th>价格</th>
<th>数量</th>
<th>操作</th>
</thead>
<tbody>
<tr v-for="(item,index) in books" :key="index" >
<td>{{item.name}}</td>
<td>{{item.price|getFormatPricr('¥')}}</td>
<td>
<button @click="addOrSub(0,index)" :disabled="item.num ==1">-</button>
{{item.num}}
<button @click="addOrSub(1,index)">+</button>
</td>
<td @click="deleteTr(index)">{{item.option}}</td>
</tr>
</tbody>
</table>
</div>
var vm = new Vue({
el: '#app',
data: {
isUser: 'true',
show:false,
books: [{
name: '追风筝的人',
price: '45',
num: 1,
option: '移除'
},
{
name: 'C语言编程大全',
price: '88',
num: 1,
option: '移除'
}, {
name: '乱世佳人',
price: '46',
num: 1,
option: '移除'
}
]
},
methods: {
addOrSub(opt, i) {
if (opt == 0) {
this.books[i].num--
} else if (opt == 1) {
this.books[i].num++
}
},
deleteTr(i){
this.books.splice(i,1)
}
},
filters: {
getFormatPricr(price, unit) {
return unit + price
}
}
});
1.2 splice用法(可替换、可删除、可增加)参考网站
1.arr.splice(2,0,"William") //插入,无删除
2.arr.splice(2,1,"William") //删除从index2原有数组的一个元素,并新增一个元素
3.arr.splice(2,3,"William")//删除从 index 2原有数组的三个元素并新增一个元素
1.3input 中key的用法是为了阻止input复用的问题
1.4v-for中key是为了提高dom的执行效率
1.5 v-if和v-show的区别
v-if:当条件为false时,包含v-if指令的元素根本不会存在dom中
v-show:当条件为false时 v-show只是给元素增加了一个行内样式display:none
1. 数组根据相同的属性进行划分,生成新的数组(2021-11-10)
思路
1.建立一个新对象temp={};
2.循环遍历原数组allList,取出要划分的属性值key,将此值与temp[key]判断
3.若不存在则根据此在此属性下新建对象,temp[key]={sub:[]},
4.若存在则直接temp[key].sub.push()
eg:
var allList = [{
"FDATE": "20211106", //日期
"FICBillNo": "YQCIN343895", //入库单号
"FICMOBillNo": "YQWORK101507", //工单号
"FDeptID": "生产部(制造部)", //部门
"FEntryID": "1", //行号
"FItemNumber": "9.05.02.00024", //料号
"FMustQty": "2000", //应收数量
"FICStockQty": "4", //实收数量
"FStockName": "立库保税成品仓", //仓库
"FPalNo": "99889988" //托盘号
},
{
"FDATE": "20211105", //日期
"FICBillNo": "YQCIN343896", //入库单号
"FICMOBillNo": "YQWORK101508", //工单号
"FDeptID": "生产部(制造部)", //部门
"FEntryID": "1", //行号
"FItemNumber": "9.05.02.000581", //料号
"FMustQty": "3000", //应收数量
"FICStockQty": "4", //实收数量
"FStockName": "立库保税成品仓", //仓库
"FPalNo": "99889988"
},
{
"FDATE": "20211105", //日期
"FICBillNo": "YQCIN343896", //入库单号
"FICMOBillNo": "YQWORK101508", //工单号
"FDeptID": "生产部(制造部)", //部门
"FEntryID": "1", //行号
"FItemNumber": "9.05.02.000581", //料号
"FMustQty": "3000", //应收数量
"FICStockQty": "4", //实收数量
"FStockName": "立库保税成品仓", //仓库
"FPalNo": "99"
},
{
"FDATE": "20211105", //日期
"FICBillNo": "YQCIN343896", //入库单号
"FICMOBillNo": "YQWORK101508", //工单号
"FDeptID": "生产部(制造部)", //部门
"FEntryID": "1", //行号
"FItemNumber": "9.05.02.000581", //料号
"FMustQty": "3000", //应收数量
"FICStockQty": "4", //实收数量
"FStockName": "立库保税成品仓", //仓库
"FPalNo": "99"
},
{
"FDATE": "20211105", //日期
"FICBillNo": "YQCIN343896", //入库单号
"FICMOBillNo": "YQWORK101508", //工单号
"FDeptID": "生产部(制造部)", //部门
"FEntryID": "1", //行号
"FItemNumber": "9.05.02.000581", //料号
"FMustQty": "3000", //应收数量
"FICStockQty": "4", //实收数量
"FStockName": "立库保税成品仓", //仓库
"FPalNo": "99746"
}
]
按照FPalNo来划分,
代码如下:
var _tempArray = {};
$.each(allList, function (index, item) {
let {
FPalNo
} = item; //等价于 let FPalNo = item.FPalNo
if (!_tempArray[FPalNo]) {
_tempArray[FPalNo] = {
FPalNo,
sub: []
}
}
_tempArray[FPalNo].sub.push(item)
//Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值。属性的顺序与通过手动循环对象的属性值所给出的顺序相同
})
let list = Object.values(_tempArray)
结果如下:
2. 动态规划之爬楼梯(每次只能爬1或者2),别用js写了,抄抄Java吧 2021-11-11
1.算法思路就是 ,爬第n阶楼梯的方法数量等于两部分之和
1.1 爬上 [n-1] 阶的方法数量(再爬一阶)
1.2 爬上 [n-2]阶的方法数量(再爬两阶);
so:dp[n] = dp[n-1] + dp[n-2]dp[n]=dp[n−1]+dp[n−2]*
初始化 dp[0]=1dp[0]=1 和 dp[1]=1dp[1]=1
时间复杂度:O(n)
代码如下(java):
class Solution{
public int climbStairs(int n){
int[] dp = new init[n+1];
dp[0]=1;
dp[1]=1;
for(var int i=2;i<=n;i++){
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}
}
既然学不会那就给他记下来~
2.1第 N 个泰波那契数(2021-11-12)
(今天想摸鱼,复习一下昨天学的动态规划)
泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
var tribonacci = function(n) {
var t=[];
t[0]=0,t[1]=1,t[2]=1;
for(var i=3;i<=n;i++){
t[i] = t[i-1]+t[i-2]+t[i-3]
}
return t[n];
};
3. 正则表达式我来啦(2021-11-13)
全部字母都是大写,比如 “USA” 。
单词中所有字母都不是大写,比如 “leetcode” 。
如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。
var detectCapitalUse = function(word) {
const reg=/^([A-Z][a-z]+|[a-z]+|[A-Z]+)$/;
return reg.test(word);
};
4.二叉树的中序遍历(2021-11-16)
昨天竟然忘记了==T.T
题目描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
var inorderTraversal = function(root, res=[]) {
if(!root) return res;
inorderTraversal(root.left,res);
res.push(root.val);
inorderTraversal(root.right,res);
return res;
};
4.好几天没算法了,记录一下最近开发遇到的问题~~
1.table的时候,用slideup和slidedown会遇到卡顿事件,应在table外围包一层div,绑定此div事件来下滑上拉展示;
2.table元素设置margin属性无效
5.记录前端监听异常的几种方法
1.window.onerror(监听不到接口报错)
window.onerror = testError;
function testError() {
arglen = arguments.length;
var errorMsg = "参数个数:" + arglen + "个";
for (var i = 0; i < arglen; i++) {
errorMsg += "/n参数" + (i + 1) + ":" + arguments[i];
}
alert('我是window.error监听方式出错了~' + errorMsg);
window.onerror = null;
return true;
}
2. window.addEventListener
window.addEventListener('error', function (error) {
alert('我是addEventListener监听方式出错了~' + error.target);
}, true)
3.断网的时候location.reload刷新请求用不了
4.try-catch
function InitgetLogo() {
try {
$.ajax({
url:'',
type: 'get',
dataType: 'json',
success: function (res) {
},
})
} catch (e) {
//处理错误代码
alert('我是try-catch-出错了~' + e.message)
}
}