return arr1.filter((ele) =>
arr2.filter((x) => x.id === ele.id).length > 0
)
}
在 chrome 浏览器下测试可行。
答案里为了简洁,使用了箭头函数。主要思路就是利用 Array 的 filter 函数。
该函数接受一个回掉函数作为参数,就是如何过滤想要的内容,满足条件的返回为true。
它并不要求b里的id都在a里,只要是共有的id都会选中。
如果是b里的id 都在a里的话,可以尝试这个方法。
function myFilter2(arr1,arr2) {var ret = []
arr2.forEach(
ele => {
var findEle = arr1.find(x => x.id === ele.id )
// 如果在arr1中找到,添加到arr1中
findEle ? ret.push(findEle) : ''
}
)
return ret
}
这个思路是把b中的每一个id都在a中找一下。
可以使用js的for循环筛选实现去掉数组中的重复的数据。
具体步骤如下:
需要准备的材料分别是:电脑、浏览器、ultraedit。
1、在ue编辑器中新建一个空白的html文件,js文件。
2、在ue编辑器中输入以下html代码。
3、在ue编辑器中输入以下js代码。
4、编辑完成以后,在ue编辑器中点击保存,格式选择UTF8无BOM。
5、在浏览器中打开此html文件,可以看到最终想要实现的去掉数组中的重复的数据效果。
var college = [[{name:'北京'}, {city:'西安'}],
[{name:'上海'},{city:'包头'}],
[{name:'广州'},{city:'福州'}],
[{name:'北京'},{city:'广州'}],
[{name:'广州'},{city:'太原'}],
[{name:'上海'},{city:'昆明'}]
]
//先用map结构记录
function arrayToMap(data) {
//非数组或数据长度为0不处理
if(!data instanceof Array || data.length == 0) {
return {}
}
var map = {}
for(var i=0i<data.lengthi++) {
if(!data[i] instanceof Array || data.length < 2) {
continue
}
var name = data[i][0].name
if(name != undefined) {
if(map[name] == undefined) {
map[name] = []
}
map[name].push(data[i])
}
}
return map
}
//把map转成数组
function mapToArray(data) {
if(data == undefined) {
return []
}
var array = []
for(p in data) {
array.push(data[p])
}
return array
}
//测试
var map = arrayToMap(college)
var array = mapToArray(map)
console.log(array)