1. 程式人生 > >underscorejs之_.filter(list, predicate, [context])

underscorejs之_.filter(list, predicate, [context])

eof 內部 eva bsp abc 特殊情況 真假 str 否則

語法:

_.filter(list, predicate, [context])

說明:

對list集合的每個成員依次進行匹配(根據predicate叠代函數檢測),返回匹配成功的集合

  • list可以為數組,對象,字符串和arguments
  • predicate會傳第三個參數value, key, list(參數名可自定義)
  • predicate函數需要返回值
  • context可以改變predicate函數內部的this

代碼示例:

示例一:filter對數組,對象,字符串,arguments進行操作並返回匹配成功的數據

var result;

// 操作數組
result = _.filter([1, 2, 3], function
(value) { return value % 2 === 1; }); console.log(result) //=> [1, 3] // 操作對象 result = _.filter({ one: ‘一‘, two: ‘二‘, three: ‘三‘, num: 123, bool: false }, function (value) { return typeof value === "string"; }); console.log(result) //=> ["一", "二", "三"] // 操作復雜的對象 var obj = { levelA: { level0:
‘level0‘, level1: ‘level1‘ }, levelB: ‘一‘, levelC: 1, levelD: { level3: ‘level3‘ } } result = _.filter(obj, function (value) { return typeof value === "object"; }); console.log(result) //=> [{level0: "level0", level1: "level1", {level3: ‘level3‘}}] // 操作字符串(此處將字符拆分為數組)
result = _.filter(‘123‘, function (value) { return value === ‘2‘ || value === ‘3‘; }); console.log(result) //=> ["2", "3"] //操作arguments function abc() { result = _.filter(arguments, function (value) { return value % 2 === 1; }); console.log(result); //=> [1, 3] } abc(1, 2, 3);

示例二:predicate函數傳遞的參數(函數內部需要return返回值,否則返回[])

var result;

//數組的情況
result = _.filter([1, 2, 3], function (value, key, list) {
    console.log(value, key, list);
    //=> 1 0 [1, 2, 3]
    //=> 2 1 [1, 2, 3]
    //=> 3 2 [1, 2, 3]
});
console.log(result) //=> []

//對象的情況
result = _.filter({one: ‘一‘, two: ‘二‘, three: ‘三‘}, function(value, key, list){
    console.log(value, key, list);
    //=> 一 one Object {one: "一", two: "二", three: "三"}
    //=> 二 two Object {one: "一", two: "二", three: "三"}
    //=> 三 three Object {one: "一", two: "二", three: "三"}
});
console.log(result) //=> []

示例三:context可以改變predicate內部的this

var result;

// 數組的情況
result = _.filter([1, 2, 3], function (value, key, list) {
    console.log(this); //=> [1, 2, 3] this是數組
}, [1, 2, 3]);

// 對象的情況
result = _.filter([1, 2, 3], function (value, key, list) {
    console.log(this); //=> Object {no: 10} this是對象
}, { "no": 10 });

// 字符串的情況
result = _.filter([1, 2, 3], function (value, key, list) {
    console.log(this); //=> String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123"}
                       //   this是將字符串拆分後的對象
}, "123");

_.select的功能和_.filter是一樣的

var result = _.filter([1, 2, 3], function (value, key, list) {
    return value % 2 === 1;
});
console.log(result) //=> [1, 3]

特殊情況

示例一:list的特殊情況

//例如:null,undefined,0,true,this等;
var result = _.filter(null, function (value, key, list) {
    return true;
});
console.log(result) //=> []

示例二:predicate函數的this為window全局對象的情況

// 例如:null,undefined,window,this等
var result = _.filter([1, 2, 3], function (value, key, list) {
    console.log(this); //=> this是window全局對象
}, null);

list參數可為真假值?

var  result = _.filter([1, true, ‘1‘, 0, undefined, null]);
console.log(result) //=> [1, true, "1"]

predicate還有其他寫法?

示例一:predicate參數為空的時候

var  result = _.filter({x: 1, y: 2});
console.log(result) //=> [1, 2]

示例二:predicate參數為一個字符的時候

var  result = _.filter([{x: 1}, {y: 2}], ‘x‘);
console.log(result) //=> [{x: 1}]

示例三:predicate參數為對象的時候

var obj = [
    {x: 1, y: 2},
    {x: 1},
    {y: 2, z: 3}
]
var  result = _.filter(obj, {x: 1});
console.log(result) //=> [{x: 1, y: 2},{x: 1}]

underscorejs之_.filter(list, predicate, [context])