Javascript 检查嵌套对象中是否存在键 在任何一个sais Object.keys之前,这可能在这里不起作用。请在投票结束或发表评论前继续阅读。

Javascript 检查嵌套对象中是否存在键 在任何一个sais Object.keys之前,这可能在这里不起作用。请在投票结束或发表评论前继续阅读。,javascript,Javascript,考虑以下对象和传入的值: 正如你所看到的,我有一个密钥,它不存在于这个对象中。但其目的是传递的密钥可能存在于该对象的某个位置,如果存在,我希望返回隐藏的值 例如: // Pseudo code, `object` is the object in the screen shot. if (object.hasKey('date_of_visit')) { return object.find('date_of_visit').hide } 我在堆栈和Web上找到的所有内容都是通过值查找键。

考虑以下对象和传入的值:

正如你所看到的,我有一个密钥,它不存在于这个对象中。但其目的是传递的密钥可能存在于该对象的某个位置,如果存在,我希望返回隐藏的值

例如:

// Pseudo code, `object` is the object in the screen shot.
if (object.hasKey('date_of_visit')) {
  return object.find('date_of_visit').hide
}
我在堆栈和Web上找到的所有内容都是通过值查找键。我没有这个值,我只有一个潜在的键。我看过lodash和下划线以及一堆堆问题,但什么也没发现

任何想法或帮助都将不胜感激。对象嵌套应该无关紧要。如果我通过了其他死亡原因,我会回到现实

想法

编辑:
这是这个物体的简化版本。同样的规则应该仍然适用。

您可以使用递归方法查找键旁边的对象。如果返回非空对象,则可以获取其隐藏值:

常数数据={ 地位:{ 死亡原因:{ 隐藏:是的, 其他死亡原因:{ 隐藏:真的 } }, 出生日期:{ 隐藏:真的 } } }; 函数findKeyobj,键{ 如果对象的类型!==“对象”返回空值; 如果输入obj,则返回obj[键]; 对于obj中的var k{ var found=findKeyobj[k],键; 如果发现,返回发现; } 返回null; } console.logfindKeydata,“出生日期”; console.logfindKeydata,“死亡原因”; console.logfindKeydata,“其他死亡原因”;
console.logfindKeydata,“你好” 由于您使用的是一些结构化数据,因此这可能是一种有效的方法:

它遵循Immutable.js的方法从不可变映射中获取内容

对于无效的密钥路径,这将返回undefined

function getIn(obj, keyPath) {
  return keyPath.reduce((prev, curr) => {
    return Object.keys(prev).length ? prev[curr] : obj[curr];
  }, {});
}

const res = getIn(
    data, ['status', 'cause_of_death', 'other_cause_of_death', 'hide']
);

看看这个:递归?能一次解决-解决所有问题???@ShubhamAgrawal你可能的答案只会返回密钥。@philipp,如果我知道怎么做,用一种干净、简洁的方式-信任。我会的。这就是求助的原因。你能不能把对象粘贴成文本而不是图像?该死,那太快了。我知道你在这里做了什么,我会在9个嵌套for循环中这样做。哈哈,太谢谢你了,伙计!正如您所看到的,我一次只传递一个值,@slider的响应对于我的用例来说效果更好。
function getIn(obj, keyPath) {
  return keyPath.reduce((prev, curr) => {
    return Object.keys(prev).length ? prev[curr] : obj[curr];
  }, {});
}

const res = getIn(
    data, ['status', 'cause_of_death', 'other_cause_of_death', 'hide']
);