filter
Es wird verwendet, um einige Elemente des Arrays herauszufiltern und dann die verbleibenden Elemente zurückzugeben.
Ähnlich wie map() akzeptiert auch filter() von Array eine Funktion. Im Gegensatz zu map() wendet filter() die eingehende Funktion nacheinander auf jedes Element an und entscheidet dann, ob das Element beibehalten oder verworfen wird, je nachdem, ob der Rückgabewert wahr oder falsch ist.
Löschen Sie beispielsweise in einem Array die geraden Zahlen und behalten Sie nur die ungeraden Zahlen bei. Sie können so schreiben
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
Um eine leere Zeichenfolge in einem Array zu löschen, können Sie Folgendes schreiben:
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
});
arr; // ['A', 'B', 'C']
Die Funktion trim() entfernt die führenden und nachfolgenden Leerzeichen aus einer Zeichenfolge
Ruf zurück
Die von filter() empfangene Rückruffunktion kann tatsächlich mehrere Parameter haben. Normalerweise verwenden wir nur den ersten Parameter, der ein Element von Array darstellt. Die Callback-Funktion kann auch zwei weitere Parameter empfangen, die die Position des Elements und des Arrays selbst angeben:
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
console.log(element); // 依次打印'A', 'B', 'C'
console.log(index); // 依次打印0, 1, 2
console.log(self); // self就是变量arr
return true;
});
Mithilfe des Filters können Sie doppelte Elemente eines Arrays geschickt entfernen:
'use strict';
var
r,
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
alert(r.toString());
indexOf gibt immer die Position des ersten Elements zurück, und die Position des nachfolgenden wiederholten Elements ist nicht gleich der von indexOf zurückgegebenen Position. Daher wird es vom Filter herausgefiltert, sodass das wiederholte Element nur das Element an der ersten Position behält
üben
Versuchen Sie bitte, Primzahlen mit filter() herauszufiltern:
'use strict';
function get_primes(arr) {
var s = arr.filter(function(x){
if(x<4)return x!=1;
var i=2;
for(;i<=x/2;++i)
if(x%i==0)return false;
return true;
});
return s;
}
// 测试:
var
x,
r,
arr = [];
for (x = 1; x < 100; x++) {
arr.push(x);
}
r = get_primes(arr);
if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
alert('测试通过!');
} else {
alert('测试失败: ' + r.toString());
}