js 提取JSON数组与JSON数组中公共的部分
近期做element-ui项目,因涉及到回显的问题,特此记录
1. 当默认选中值和所有选项均为JSON数组时(特定情形: 后台返回的两个字段数据结构完全一致)
为何需要用此种方法(项目中遇到的(奇葩)问题)? ----这些值用于select框的选择和默认选中,但默认选中的值可能不在select的所有值内(数据输入人员的失误,导致数据匹配不上----吐槽:自己数据输错了,关咱啥事~~),以致保存时对应的ID传过去了,但后续都错了,因此决定以主键(ID)来做验证,匹配不上的就不要了,这样来做验证
代码如下(关键代码仅一行,避免了双重map循环----也能解决,但多low啊)
1 const a = [{ 2 id: 1, 3 a: 123, 4 b: 1234 5 }, { 6 id: 2, 7 a: 123, 8 b: 1234 9 }]; 10 const b = [{ 11 id: 1, 12 a: 123, 13 b: 1234 14 }, { 15 id: 2, 16 a: 123, 17 b: 1234 18 }, { 19 id: 3, 20 a: 123, 21 b: 1234 22 }, { 23 id: 4, 24 a: 123, 25 b: 1234 26 }]; 27 const arr = b.filter(x => a.some(y => y.id === x.id)); 28 console.log(arr) // 打印出来的即为a和b的id相等的公共值
2. 当默认选中值返回的是id组成的数组时(此场景使用在quasar框架的table默认选中的情况下)
const a = [{ id: 1, a: 123, b: 1234 }, { id: 2, a: 123, b: 1234 }, { id: 3, a: 123, b: 1234 }, { id: 4, a: 123, b: 1234 }]; const b = [1, 2] const arr = Array.from(b.filter(x => new Set(a).has(x.id))) console.log(arr)
总结: 对于个人来说,当遇到这种数据而又不得不处理时(无奈),个人习惯用map嵌套来解决(一个map走天下),但其他的一些基本操作还是要会的,毕竟上述这两种写法代码量少(看着高大上),暂时就先总结到这,有建议或疑问的欢迎交流讨论