请教大神,js如何根据id对对象数组筛选

JavaScript011

请教大神,js如何根据id对对象数组筛选,第1张

function myFilter(arr1,arr2) {

    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)