1.比较版本:用es6中的数组方法some
function compareVersion() {
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组。
let curVersion = getSystem().SDKVersion.split('.').map( (i) => {
console.log(i);//'1' '9' '0'
})
console.log("SDKVersion", getSystem().SDKVersion);//SDKVersion 1.9.0
console.log("SDKVersion", getSystem().SDKVersion.split('.'));//['1','9','0']
console.log(curVersion);//[1,9,0]
let version = VERSION.split('.').map(i => Number(i))
return !curVersion.some((item, i) => item < version[i])
}
2.去拿data中的数据:包含app.data,res.data
let { missKeyInfo, sid } = app.globalData.userInfo;
3.assign()在对象合并和赋值中的应用
object.assign(app.globalData.userInfo,this.data.userInfo);
4.Object.keys()在赋值中的应用
for(var attr of Object.keys(that.data.userInfo)){
(attr!='account')&&(that.data.userInfo[attr]=app.globalData.userInfo[attr])
}
5.es6的find和findIndex方法
数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
如下
[1, 4, -5, 10].find((n) => n < 0)
// -5
[1, 5, 10, 15].find(function(value, index, arr) {
return value > 9;
}) // 10
上面代码中,find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。
数组实例的findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}) // 2
6.if (Version <= '1.6') return Promise.reject('版本过低,不支持此API')
if (!isAndroid) return Promise.reject('除安卓外均不支持此方法')
7.const modal = weex.requireModule('modal')
weex.registerModule('ModalModule', {
loading (params) {
if (params.show) console.log('%c[ModalModule] loading open', 'color: green;')
else console.log('%c[ModalModule] loading close', 'color: green;')
},
...modal
})
我们对于...modal来进行解析
创建一个对象 obj
8.try catch的使用方法
aliPay () {
try {
weex.requireModule('PayModule').invokePaySdk({
type: 'alipay',
orderInfo: '123EE456WDE789',
sWxAppId: 'null'
}, resp => {
if (typeof resp === 'string') {
this.info = 'string: ' + resp
} else {
this.info = JSON.stringify(resp)
}
})
} catch (err) {
this.info = 'Error: ' + err
}
}
}
9.使用字符串:`非常抱歉,你${payMethod}支付失败,建议你尝试其他支付方式`
10.handleCelsiusChange(temperature) { this.setState({scale: 'c', temperature})} 注意temperature,当变量和属性重名时,怎么给对象赋值
11.reduce()方法
reduce()方法接收一个函数callbackfn作为累加器(accumulator),
数组中的每个值(从左到右)开始合并,最终为一个值。
我:
而initialValue作为第一次调用
callbackfn函数的第一个参数
我:
function callbackfn(preValue,curValue,index,array){}
preValue: 上一次调用回调返回的值,或者是提供的初始值(initialValue)
curValue: 数组中当前被处理的数组元素
index: 当前数组项在数组中的索引值
array: 调用 reduce()方法的数组
let paramStr = Object.keys(options.params).reduce((acc, key) => `${acc}${key}=${options.params[key]}&`, '?')
reduce在拼接路径的时候的用法:'?'作为函数的第二个参数,那么就是以他开头还是累加 acc 是上次的拼接的结果 key是这次的key ${options.params[key]}是这次的值 注意后面的&:每次凭借都是以&结尾的
12.以后写函数的时候先考虑传的参数是什么类型,然后给写默认值
????function?http?(OPTIONS?=?{})?
13.class讲解http://www.cnblogs.com/humin/p/4313807.html
14.let users = [...this.state.users, { avatar: '', content: val, username: 'zfpx' }]; 给数组添加元素,展开旧的,加入新的
15.res = await axios.get('/user.json') 返回的是请求到的数据
axios.get('/user.json') 返回的是一个promise
await 后面如果是一个promise的话,返回的就是promise返回的结果,这里就是数据
这个其实和axios.get('/user.json').then(res => {.........})是一样的,只不过这里是直接拿到了res,可以在下面写应用res了
16.数组扁平化
/**
* 截取不带参数的路由
* @param {String} str 路由路径
* @return {String} 去掉参数后的路由路径
*/
const replaceQuery = str => str.replace(/\/:.*/, '');
/**
* 扁平化数组
* 交给导航栏使用
* @param {Array} options
* @return {Array} menu = [
* {
* label: '',
* path: '',
* icon: '',
* children: [
* {
* label: '',
* path: ''
* }
* ]
* }
* ]
*/
const createMenus = options =>
options.map(({ label, path, icon, children }) => {
const option = { label, path: replaceQuery(path), icon };
// 地址管理不带二级菜单
if (Array.isArray(children) && !['地址管理', '账户中心'].includes(label)) {
return {
...option,
children: children.map(({ label, path }) => {
return { label, path: replaceQuery(path) };
}),
};
}
return option;
});
/**
* 扁平化数组
* 交给路由使用
* @param {Array} options
*/
const createRoutes = options =>
options
.reduce((pre, item) => {
const { children, label, ...others } = item;
if (others.component !== null) {
pre.push(others);
}
if (Array.isArray(children)) {
return [...pre, ...createRoutes(children)];
}
return pre;
}, [])
.filter(item => item.path);
/**
* 扁平化数组
* 交给面包屑使用
* @param {Array} options
*/
const createBreadcrumb = options =>
options.map(({ label, path, children }) => {
if (Array.isArray(children)) {
return {
label,
path: replaceQuery(path),
children: createBreadcrumb(children),
};
} else {
return { label, path: replaceQuery(path) };
}
});
export { createRoutes, createMenus, createBreadcrumb };
17.对于配置常量对象 ,不允许修改且有默认值的
const carTypeDict = {
[0]: 'kg_xxmb_1534822754105.png',
[1]: 'kg_jb_1534822754199.png',
[2]: 'kg_xxxh_1534822754118.png',
[4]: 'kg_dxxh_1534822754177.png',
[5]: 'kg_ywk_1534822754120.png',
[10]: 'kg_xxpb_1534822754105.png',
[11]: 'kg_zxpb_1534822754129.png',
[12]: 'kg_dxpb_1534822754148.png',
};
const handler = {
get(target, name) {
// use 'jb.png' instead of no picture of carcode
return name in target ? target[name] : target[1];
},
set(value) {
// can't change element of carType
return false;
},
};
const carType = new Proxy(carTypeDict, handler);
18.数组解构
let [key, val] = item.split('=');
obj[key] = val;
11.对象解构
let env = process.env.BETA_ENV ? 'beta' : process.env.NODE_ENV;
let { [env]: { userName, userEmail } } = gitUserInfo;
这里去看看js和es6