【问题标题】:Filter javascript map object by array of keys [closed]通过键数组过滤javascript映射对象[关闭]
【发布时间】:2018-01-16 14:18:39
【问题描述】:

我有一个键数组:

var arr = ['var1', 'var2', 'var3']

我还有一个 Javascript 映射对象,其中包含四个键(var1、var2、var3、var4)和值(1、2、3、4),我想通过 arr 数组过滤它们,所以我得到一个新的映射对象仅包含键 (var1, var2, var3) 和值 (1, 2, 3)。有谁知道我该怎么做?

【问题讨论】:

  • 您能否向我们展示您想要组合的数组或对象以及您希望它如何结束的示例?
  • 我已经尝试了 map/filter/reduce 但我没有任何一个可以工作@ScottSauyet
  • 所以展示你的尝试;这样我们就可以解释有缺陷的假设以及为什么这些方法不起作用,然后提供一个可行的解决方案。通过这种方式,您可以学到一些有用的东西,而不是仅仅获得一个黑盒解决方案。
  • 我投票决定将此问题作为离题结束,因为它显示的研究工作很少。
  • @danielo,我的解决方案对你有用吗?

标签: javascript arrays dictionary filter


【解决方案1】:

您可以使用 reduce (1) 填充新对象:

var map = {a: 1, b: 2, c: 3};
var keys = ["b", "c", "d"];

var c = keys.reduce(function(obj, key) {
    if (map.hasOwnProperty(key)) obj[key] = map[key];
    return obj;
}, {}); // {b: 2, c: 3}

【讨论】:

    【解决方案2】:

    您必须使用delete operator 才能删除一个对象的属性。

    var arr = ['var1', 'var2', 'var3']
    var obj = { var1:1, var2:2, var3:3, var4:4};
    var newObj = Object.assign({}, obj);
    Object.keys(newObj).forEach(function(key){
       if(!arr.includes(key))
        delete newObj[key];
    });
    console.log(newObj);

    【讨论】:

      【解决方案3】:

      如果我没记错的话,你有以下情况:

      const keysToKeep = ["var1", "var2", "var3"];
      const object = {
        "var1": 1,
        "var2": 2,
        "var3": 3
      };
      

      如果是这种情况,那么您可以执行以下操作:

      const filtered = Object.entries(object)
      .filter(e => keysToKeep.includes(e[0]))
      .reduce((acc, entrt)=>{
        acc[entry[0]] = entry[1];
        return acc;
      }, {});
      

      或者

      const filtered = Object.entries(object)
      .map(e => ({
        "key": e[0],
        "value": e[1]
      })).filter(e => keysToKeep.includes(e.key))
      .reduce((acc, entry)=>{
        acc[entry.key] = entry.value;
        return acc;
      }, {});
      

      这基本上将获取对象中包含的每个条目,仅保留具有先前定义的键数组中的键的条目,然后将其还原为对象。

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 2023-03-18
        • 2020-10-24
        • 1970-01-01
        • 2022-09-24
        • 2022-07-25
        • 2019-11-21
        • 2022-07-13
        相关资源
        最近更新 更多