困扰了挺久的问题,一直想不到怎么解决,A表里有个字段是存放在B表的关联id,比如(3,5,7,8)对应B表id为3 5 7 8 的数据,我想在前端页面把对应的这几个id的中文显示出来。
A表如下,group_id就是B表的id集合。
B表如下,我想取出对应的name,然后拼接成一个新的字符串,返回到A表里,返回给前端显示。
困扰了挺久的问题,一直想不到怎么解决,A表里有个字段是存放在B表的关联id,比如(3,5,7,8)对应B表id为3 5 7 8 的数据,我想在前端页面把对应的这几个id的中文显示出来。
A表如下,group_id就是B表的id集合。
B表如下,我想取出对应的name,然后拼接成一个新的字符串,返回到A表里,返回给前端显示。
let a = [{group_id:'1,3,5,7,9'},{group_id:'1'}];
let b = [{id:1,name:'name1'},{id:3,name:'name3'},{id:5,name:'name5'}];
/**
* @param a:array - a 数组
* @param b:array - b 数组
* @return result:[] - 结果数组
*
*/
function getResult(a,b){
const res = a.map(a_item=>{
const group_ids = a_item.group_id.split(',');
b.forEach(b_item=>{
const target = group_ids.includes(`${b_item.id}`);//判断group_ids是否包含 b 数组的 id
if(target) a_item.name = a_item.name?`${a_item.name}-${b_item.name}`:`${b_item.name}`//如果存在就处理对应逻辑
})
return a_item;
})
return res;
}
const res = getResult(a,b)
console.log(res)
不是很明白?是这样的吗?
let A_list = [
{
"id":4,
"u_id":1,
"group_id":"1,3,5,6,8"
},
{
"id":5,
"u_id":3,
"group_id":"1,2,4"
}
]
let B_list = [
{
"id":8,
"name":"群H"
},
{
"id":4,
"name":"群D"
}
]
;(function(arr,brr){
arr.forEach(item => {
let res = item.group_id.split(',')
brr.forEach(j => {
if(res.includes(j.id.toString())) {
console.log(j.name)
}
})
})
}(A_list,B_list))
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.7k 阅读✓ 已解决
首先我觉得你这个表设计有问题,你这种多对多的关系应该专门做一个中间表来进行关联,那么有一下几种方案:
JOIN
进行查询;id IN(group_ids)
来把数据查询出来,然后再做组装;JOIN
进行关联查询出来。从这问题来看,我估计你这数据没多少,用第二种形式应该就可以了,如果数据量大的话,然后再做个缓存,缓存方案的话,就是如果触发了某条数据的更新,再把某条数据对应的缓存删除,不然的话直接从缓存取数据,就降低了数据库的查询。