V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Akebono
V2EX  ›  问与答

JS 中,怎么给 Object 内的所有 Object 添加一个键值对呢?

  •  
  •   Akebono · 2022-02-17 13:57:53 +08:00 · 1296 次点击
    这是一个创建于 771 天前的主题,其中的信息可能已经有所发展或是发生改变。
    const object = {
        tom:{
            action:{
                eat:()=>{console.log("tom-eat")}
            }
        }
        jerry:{
        	action:{
                eat:()=>{console.log("jerry-eat")}
            }
    	}
        me:{
            action:{
                eat:()=>{console.log("me-eat")}
            }
        }
    }
    

    假设有这么一个 Object ,

    除了遍历和手动输入以外,怎么给这个 Object 内所有的 [key].action 内添加一个 nightshow: [key].action.eat() 键值对呢?

    谢谢!

    11 条回复    2022-02-18 08:11:08 +08:00
    dcalsky
        1
    dcalsky  
       2022-02-17 14:10:24 +08:00
    js 、ruby 、python 给我最大的感受就是花在思考奇技淫巧上的时间远比老老实实写遍历来得多。
    YouMoeYi
        2
    YouMoeYi  
       2022-02-17 14:12:20 +08:00
    直接整个类, 然后把 tom, jerry, me, 这些 new 出来不行吗
    为啥不考虑遍历, 也没多麻烦
    shintendo
        3
    shintendo  
       2022-02-17 14:13:10 +08:00   ❤️ 1
    Object.values(object).forEach(x => x.action.nightshow = x.action.eat())

    这不需要什么奇技淫巧啊
    YouMoeYi
        4
    YouMoeYi  
       2022-02-17 14:18:22 +08:00
    @shintendo 你这把 object 整成数组了吧, key 也丢了
    shintendo
        5
    shintendo  
       2022-02-17 14:28:25 +08:00
    TomVista
        6
    TomVista  
       2022-02-17 14:30:23 +08:00
    Object.prototype.action={eat}
    proger
        7
    proger  
       2022-02-17 14:37:11 +08:00
    [key].action.eat() 把这个没有返回值的空函数赋值过去好像没有意义吧,只能得到 nightshow = undefined
    YouMoeYi
        8
    YouMoeYi  
       2022-02-17 14:41:37 +08:00
    @shintendo 没事 我傻了 传引用 SRY
    Pipecraft
        9
    Pipecraft  
       2022-02-17 15:03:35 +08:00
    用 Proxy 可以做到
    acthtml
        10
    acthtml  
       2022-02-17 15:57:55 +08:00
    可以使用 proxy.
    new Proxy(target, handler)
    gen900
        11
    gen900  
       2022-02-18 08:11:08 +08:00 via iPhone
    for(key in object) object.key.action.nightshow = object.key.action.eat()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2781 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:20 · PVG 20:20 · LAX 05:20 · JFK 08:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.