我正在尝试过滤类似于以下内容的数据:
data = {
ABC: "Lorem Ipsum lorem lorem",
DEFG: "Lorem Ipsum lorem lorem",
HI: "Lorem Ipsum lorem lorem",
JK: "Lorem Ipsum lorem lorem"
}
针对这样的数组:
myArray = ["HI","LMN","ABC"]
我正在尝试返回
myArray
中不存在其密钥的对我尝试了以下操作,但均未成功:
$scope.filteredResults = $filter("filter")(data, function (val, index) {
for (var i = 0; i < myArray.length; i++) {
if (index === myArray[i]) {
return false
}
}
return true
})
最佳答案
如果对象的索引是它的键,则可以使用Array.prototype.indexOf
检查它是否存在于数组中。我假设index
是对象的密钥?
$scope.filteredResults = $filter("filter")(data, function(val, index) {
return myArray.indexOf(index) === -1;
})
如果要返回过滤的对象(不包括过滤器列表中存在的任何键),则可以按键过滤,然后根据允许的键缩小对象。
这是使用黑名单过滤对象的纯JavaScript实现。
var data = {
ABC: "Lorem Ipsum lorem lorem",
DEFG: "Lorem Ipsum lorem lorem",
HI: "Lorem Ipsum lorem lorem",
JK: "Lorem Ipsum lorem lorem"
};
var blackList = ["HI", "LMN", "ABC"];
var filtered = Object.keys(data).filter(function(key) {
return blackList.indexOf(key) === -1;
}).reduce(function(result, key) {
result[key] = data[key];
return result;
}, {});
document.body.innerHTML = JSON.stringify(filtered, null, ' ');
body { white-space: pre; font-family: monospace; }
关于javascript - 自定义 Angular 滤镜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29918520/