change(id) {
this.childMenu = this.menu[this.menu.findIndex(menu=> menu.id === id)].data
}
这个写法很懵逼啊 原理呢??
findIndex之中
menu => menu.id === id 这是得到什么?? 是一个下标吗?
对于这个写法的原理很懵啊
里面这个menu => 指的是原始数据对象吗?
menu.id 是每一列的id吗?
change(id) {
this.childMenu = this.menu[this.menu.findIndex(menu=> menu.id === id)].data
}
这个写法很懵逼啊 原理呢??
findIndex之中
menu => menu.id === id 这是得到什么?? 是一个下标吗?
对于这个写法的原理很懵啊
里面这个menu => 指的是原始数据对象吗?
menu.id 是每一列的id吗?
这个写法是ES6新增的 "arrow-function" 语法
规范中的定义见 ECMA-262
可以使用babel将ES6语法转换为ES5的形式,看看它的功能。
学习ES6的新语法可以上
阮一峰老师的ES6入门指南教程
或者Dr. Axel Rauschmayer
关于ES各个阶段的教程级书http://exploringjs.com/
你可以这样理解
//根据传入id获取点击的数据的下标
let index = this.menu.findIndex(function(menu){
//根据 menu 中的id属性来判断这个 menu 是否是上面id中
//对应的数据,如果是返回true ,否返回false,继续下面的一条数据的遍历,以此类推
//如果返回true,那么findIndex方法会将这个item对应的 index 返回到外面接受
return menu.id === id
})
//这里就简单了 给childMenu 赋值menu[index].data 这个容易理解吧
this.childMenu = this.menu[index].data
文档地址: http://www.runoob.com/jsref/j...
findIndex可以传递3个参数
第一个是 当前元素
第二个是 当前元素的索引
第三个是 当前元素所属的数组对象
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答4.6k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答5k 阅读
这个行代码很简单的,看命名应该知道,根据子菜单的id来切换菜单选项。遇到这种嵌套的代码,只要一层一层看就可以了。首先从最里层开始(正常这里应该有上下文,不过从调用的方法来看,能确定this.menu是数组),
这句如果不知道什么意思,就直接搜下findIndex,能知道这个方法的作用是返回符合条件的元素的下标index,之后就简单了。
清楚明白,获取数组内指定下标的元素
然后再赋值给子菜单对象
this.childMenu
,ok了。下面看下完整的模拟到这里其实可以结束了。不过也看出来了,这段代码中的数据设计得有些冗余,可以优化一下