在寻找问题的答案时,我发现了一个不错的博客,并解释了同样的问题.这是链接
你也试试jsfiddle
<html>
<head>
<style>div{ padding:8px; border:1px solid; }</style>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#filterClick").click(function () {
$('div').css('background','white');
$('div').filter('#Fruits').css('background','red');
});
$("#findClick").click(function () {
$('div').css('background','white');
$('div').find('#Fruits').css('background','red');
});
});
</script>
</head>
<body>
<h1>jQuery find() vs filter() example</h1>
<div id="Fruits">
Fruits
<div id="Apple">Apple</div>
<div id="Banana">Banana</div>
</div>
<div id="Category">
Category
<div id="Fruits">Fruits</div>
<div id="Animals">Animals</div>
</div>
<br/><br/><br/>
<input type='button' value='filter(Fruits)' id='filterClick'>
<input type='button' value='find(Fruits)' id='findClick'>
</body>
Run Code Online (Sandbox Code Playgroud)
假设您有一个“id”具有重复值的对象数组,请参阅下面的查找和过滤方法的结果。
let arrObj = [ { id:1, name:"One" },
{ id:2, name:"Two" },
{ id:1, name:"One" }
];
var resultObj = arrObj.find(v => v.id === 1); // { id: 1, name: 'One'}
var resultArrObj = arrObj.filter(v => v.id === 1); // [
// { id:1, name:"One" },
// { id:1, name:"One" }
// ]
Run Code Online (Sandbox Code Playgroud)
find
:
一旦条件为真,则停止进一步迭代。
如果没有匹配,则返回“未定义”
filter
:
迭代数组中的所有项目。
始终返回一个数组。
查找与过滤
假设您有以下数组:
array folks = [
{name: "Bob", age: "32", occupation: "developer"},
{name: "Bill", age: "17", occupation: "delinquent"},
{name: "Brad", age: "40", occupation: "yes"}
]
Run Code Online (Sandbox Code Playgroud)
查找:
folks.find( fella => name === "Bob")
//Returns an object: {name: "Bob", age: "32", occupation: "developer"}
Run Code Online (Sandbox Code Playgroud)
筛选器:
folks.filter( fella => name === "Bob")
//Returns an array: [ {name: "Bob", age: "32", occupation: "developer"} ]
Run Code Online (Sandbox Code Playgroud)