map与forEach的嵌套遍历,如何返回一个数组?
应用场景
一个表格的过滤筛选,可能涉及多个筛选条件,this.filter
里面存的是所有筛选条件的v-model状态的一个对象,this.tableData
是从后端获取的所有原始表格数据的数组,this.filteredTableData
是过滤后的表格数据的数组。
代码
filterTableData() {
this.filteredTableData = this.tableData.map((item, index) => {
Object.keys(this.filter).forEach(key => {
if (this.filter[key] && item[key] && item[key] === this.filter[key]) {
console.log(item)
return item
}
})
})
console.log(this.filteredTableData)
// this.paginateTableData()
},
问题
这样写,会使得第二个console.log(this.filteredTableData)
拿到一个全部是undefined
的数组。这样的错误应该是因为forEach没法用return 跳出循环。
所以我想知道:
在使用map 且map内部最好不使用变量(使用也行吧,只是担心性能)的情况下,如何实现这个函数?
如果
this.filteredTableData
的数据量特别大,有没有什么更好的办法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
直接用 [].filter 啊...
我回答你数组里都是
undefined
的问题吧。你在map函数里 没有
return
当然就不会有返回值啊,没有显示的返回值当然是undefined。相当于你遍历的结果没有返回 做了无用功。
map的回调函数不应该这么写么?
当我没有回答吧,又看了一遍,你是知道这个问题的。return Object.keys(this.filter) 对你这来说没有意义。
还是需要使用个中间变量的,如:
题主的问题有点难懂
若想把map转为数组
只需要输入
[...map]
即可filter更为恰当。
另外,加一个变量就会影响性能的观点从何而来。不要在还没出现任何性能问题之时就靠猜测它会有性能问题。
要么你就用普通的for循环代替,要么你就得在forEach外面定义一个bool值来判断。
我之前遇到过使用 map 和 forEach 带来的问题,后来都合理的使用 for...in 和 for...of 来解决掉了,你是不是可以换一下思路,不一定要用 map 和 forEach 来解决。
不要再forEach里用this
不知道你是不是这个意思。
最近也碰到了这个需求,这个需求具体是需要从json对象数组导出到excel文件,使用xlsx插件.
在导出前需要将对象数据数组转化为数组-数组的格式,并且只筛选出给定的字段例如:
根据题主的描述来看,题主的需求与我的需求是一致的.首先,题主的this.filter完全没必要是一个对象,需要改为一个数组.然后,可以用以下写法: