javascript - 在 Javascript 中通过键数组过滤对象

标签 javascript arrays object

我想返回一个仅包含通过数组传递的键的对象, 例如 我有一系列 key ,

const arr = ['a', 'b', 'c', 'd', 'e']

和一个对象,

const obj = {
    a: {
        name: 'a',
        capital: 'A'
    },
    g: {
        name: 'g',
        capital: 'G'
    },
    b: {
        name: 'b',
        capital: 'B'
    },
    m: {
        c: {
            name: 'c',
            capital: 'C'
        }
    },
    z: {
        name: 'z',
        capital: 'Z'
    },
    n: {
        e: {
            name: 'e',
            capital: 'E'
        }
    },
    o: {
      f: {
        d: {
          name: 'd',
          capital: 'D'
        }
      }
    }
}

现在我想返回一个对象,其中仅包含 arr'a'、'b'、'c'、'd' 和 'e' 中存在的键 code>,所以我的结果对象将是,

{
    a: {
        name: 'a',
        capital: 'A'
    },
    b: {
        name: 'b',
        capital: 'B'
    },
    c: {
        name: 'c',
        capital: 'C'
    },
    e: {
        name: 'e',
        capital: 'E'
    },
    d: {
        name: 'd',
        capital: 'D'
    }

}

方法:

我正在接近它,如下所示,但没有得到想要的结果,

function fetchValueByKey(object, key, result) {
  if(typeof object !== 'object')
    return result;
  for(let objKey in object) {
    if(key.indexOf(objKey) > -1) {
      result[objKey] = object[objKey];
      console.log(result);
    } else {
      result[objKey] = fetchValueByKey(object[objKey], key, result);
      console.log(result)
    }
  }
}

console.log(fetchValueByKey(obj, arr, {}));

请建议我如何实现这一目标?

最佳答案

你的代码很好;您只需在循环后返回或输出结果即可。 PLUS,不需要 result[objKey] =,因为您已经确定 objKey 不在您要查找的键列表中寻找,所以只需再次调用该函数即可向下钻取子对象。

const arr = ['a', 'b', 'c', 'd', 'e']
const obj = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } };

function fetchValueByKey(object, key, result) {
  if(typeof object !== 'object')
    return result;
  for(let objKey in object) {
    if(key.indexOf(objKey) > -1) {
      result[objKey] = object[objKey];
      //console.log(result);
    } else {
      fetchValueByKey(object[objKey], key, result);
      //console.log(result)
    }
  }
  return result;
}

console.log(fetchValueByKey(obj, arr, {}));

关于javascript - 在 Javascript 中通过键数组过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72204726/

相关文章:

javascript - 如何动态地将对象添加到对象内部的对象

javascript - 通过在 JSON 数据中查找值来创建新的对象数组

c++ - 为什么我的 add 函数没有将所有数字相加?

javascript - 如何在初始化时通过操作其他键来直接获取相同的对象属性

javascript - JQuery 移动多行按钮覆盖问题

javascript - 如何查询 key :value pair in MongoDb via Javascript?

javascript - 如果条件为真,则将键添加到散列

javascript - 在 D3 中换行长文本标签,无需额外换行

arrays - Xcode 在处理文件时卡住

java - 我应该如何在 Java 中初始化一个复杂的实例变量?