【问题标题】:jQuery/JavaScript: Filter array with another arrayjQuery/JavaScript:用另一个数组过滤数组
【发布时间】:2013-09-24 12:17:17
【问题描述】:

假设我有两个数组:

{First: [One, Two, Three], Second: [One, Two, Three], Third: [One, Two, Three]}

[First, Third]

现在我需要删除第一个数组中不在第二个数组中的每个键。所以 - 以这两个为例 - 我应该留下:

{First: [One, Two, Three], Third: [One, Two, Three]}

我尝试为此使用 $.grep,但我不知道如何使用数组作为过滤器。需要帮助! :)

【问题讨论】:

  • 看,之前有人问过:stackoverflow.com/questions/10927722/…
  • 给定结果,你的意思是'删除 second 数组中不在 first 数组中的每个键'?
  • 第一个“数组”是一个以数组作为属性值的对象,而不是数组。
  • @Jahnux73 在询问之前我通过 SO 寻找,但没有找到,谢谢!

标签: javascript jquery arrays filtering


【解决方案1】:

最快的方法是创建一个新对象并且只复制你需要的键。

var obj = {First: [One, Two, Three], Second: [One, Two, Three], Third: [One, Two, Three]}
var filter = {First: [One, Two, Three], Third: [One, Two, Three]}


function filterObject(obj, filter) {
  var newObj = {};

  for (var i=0; i<filter.length; i++) {
    newObj[filter[i]] = obj[filter[i]];
  }
  return newObj;
}


//Usage: 
obj = filterObject(obj, filter);

【讨论】:

    【解决方案2】:

    您可以在不创建新对象的情况下做的其他事情是删除属性

    var obj = {First: ["One", "Two", "Three"], Second: ["One", "Two", "Three"], Third: ["One", "Two", "Three"]};
    var filter = ["Second", "Third"];
    
    
    function filterProps(obj, filter) {
      for (prop in obj) {
          if (filter.indexOf(prop) == -1) {
              delete obj[prop];
          } 
      };
      return obj;
    };
    
    //Usage: 
    obj = filterObject(obj, filter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多