我想用这样的许多照片的信息过滤一个数组,但过滤器应该是变量的(参数的参数和数据类型):
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)总是为真。
如何做到这一点? 谢谢,马库斯!
答案 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)