过滤方法

时间:2017-01-25 11:22:15

标签: javascript arrays filter

我想用这样的许多照片的信息过滤一个数组,但过滤器应该是变量的(参数的参数和数据类型):

var photos = [
  {
    lat: -15,
    lng: -20,
    alt: 381,
    date: "2016-12-12",
    comment: "Text1" // and many more arguments like file size, bitdepth, iso, ...
  }, 
  {
    lat: -17,
    lng: -22,
    alt: 1381,
    date: "2016-11-11",
    comment: "Text2" // and many more arguments like file size, bitdepth, iso, ...
  },
  {
    lat: -25,
    lng: -30,
    alt: 1000,
    date: "2016-10-10",
    comment: "Text3" // and many more arguments like file size, bitdepth, iso, ...
  },
];

现在我想使用方法

过滤数组
array.filter(callbackfn[, thisArg])

但是过滤标准和要查找的数据的数据类型各不相同(例如,搜索具有'(lat< -15)'或'(lng> -25)&&&(alt> 1000)的元素'或'评论==“Text2”'但我不知道如何做到这一点。显然

function filterMetaData(obj, filterString) {
    if(filterString) {
        return true;
    } else {
        return false;
    }
}

var result = photos.filter(filterMetaData, "lat < -18");

不起作用,因为“lat&lt; -18”是一个字符串而不是像条件一样解释,所以if(filterString)总是为真。

如何做到这一点? 谢谢,马库斯!

2 个答案:

答案 0 :(得分:1)

您可以将函数用作参数

function filterMetaData(fn) {
    return function (o) {
        return fn(o);
    };
}

var photos = [{ lat: -15, lng: -20, alt: 381, date: "2016-12-12", comment: "Text1" }, { lat: -17, lng: -22, alt: 1381, date: "2016-11-11", comment: "Text2" }, { lat: -25, lng: -30, alt: 1000, date: "2016-10-10",  comment: "Text3" }],
    result = photos.filter(filterMetaData(function (o) { return o.lat < -18; }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

使用object property assignment pattern

进行ES6解构

function filterMetaData(fn) {
    return function (o) {
        return fn(o);
    };
}

var photos = [{ lat: -15, lng: -20, alt: 381, date: "2016-12-12", comment: "Text1" }, { lat: -17, lng: -22, alt: 1381, date: "2016-11-11", comment: "Text2" }, { lat: -25, lng: -30, alt: 1000, date: "2016-10-10",  comment: "Text3" }],
    result = photos.filter(filterMetaData(({ lat, lng, alt, date }) => lat < -15 || (lng > -25 && alt > 1000)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

喜欢这个

   data =  photos.filter(function(a){
return (a.lat < -15) ||(a.lng > -25 && (a.alt > 1000) || (a.comment == "Text2"); 
});
consoe.log(data)