我正在尝试过滤类似于以下内容的数据:

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/

10-13 07:59
查看更多