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

JavaScript023

请教大神,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中有一个函数filter(),可以用来过滤数组中的特定元素;

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组。

语法 : filter((item, index, arr) =>{ ... })

filter中一共可已设置三个入参:其中item( 必填 )--代表数组中的每个元素,filter会对每个元素进行遍历;

index( 先填 )--每个元素的index;arr( 选填 )--指定要遍历的数组。

要筛选数组中的奇数位元素或者偶数位元素就可以用filte()方法。

例子:

1、filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。原数组不变不会对空数组进行检测 2、find() 对于空数组,函数是不会执行的。不会改变原数组返回符合测试条件的第一个数组元素值3、some 用于检测数组中的元素是否满足指定条件会依次执行数组的每个元素-如果有一个元素满足条件(即只要有条件满足即可相当于或),则表达式返回true , 剩余的元素不会再执行检测----------------------如果没有满足条件的元素,则返回false4、every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)every() 方法使用指定函数检测数组中的所有元素-如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测------------------------------------------如果所有元素都满足条件,则返回 true