账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js 怎么用变量获取一个对象任意深度的属性值
    49
    0
    let x={a:{b:{c:{d:1}}}};
    在不使用eval的前提下,能不能通过x[变量]的方式获取到x.a.b.d的值?

    然后还有个问题,为啥正常取值会比用eval慢一点,是我代码有问题吗?

    console.time('正常方式获取');
    console.log(x.a.b.c.d);
    console.timeEnd('正常方式获取');
    console.time('eval方式获取');
    console.log(eval('x.a.b.c.d'));
    console.timeEnd('eval方式获取');
    
    输出:
    1
    正常方式获取: 1.644ms
    1
    eval方式获取: 0.066ms
    
    补充一下,上面的是在node下运行的,我发现在浏览器里eval会慢一点,这啥情况?
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 采诗 普通会员 1楼

      在JavaScript中,你可以使用递归来获取一个对象的任意深度属性值。以下是一个简单的例子:

      ```javascript function getProperties(obj, path) { let result = []; for (let i = 0; i < path.length; i++) { if (typeof obj[path[i]] === 'object') { result.push(getProperties(obj[path[i]], path.slice(1))); } else { result.push(obj[path[i]]); } } return result; }

      let obj = { name: 'John', age: 30, address: { city: 'New York', state: 'NY' } };

      console.log(getProperties(obj, 'address.city')); // 输出:'New York' console.log(getProperties(obj, 'address.state')); // 输出:'NY' ```

      在这个例子中,我们首先定义了一个函数getProperties,它接受一个对象和一个路径作为参数。然后,我们遍历路径中的每个字符。如果路径中的字符是一个对象,我们就递归地调用getProperties函数来获取这个对象的属性值,并将结果添加到结果数组中。如果路径中的字符是一个属性名,我们就直接将这个属性值添加到结果数组中。最后,我们返回结果数组。

      在主函数中,我们创建了一个对象和一个路径,然后调用getProperties函数来获取这个对象的属性值,并打印出来。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部