gpt4 book ai didi

javascript - 根据obj键执行函数

转载 作者:行者123 更新时间:2023-12-02 21:21:32 25 4
gpt4 key购买 nike

function a() {
console.log('a');
}

function b() {
console.log('b');
}

function c() {
console.log('c');
}

let obj1 = {a:1}
let obj2 = {a:1, c:1}
let obj3 = {b:1, c:2}

可以吗,写一些代码根据obj1 obj2 obj3键执行函数?

example1 obj1 然后执行function a()

example2 obj2 然后执行function a()function c()

example3 obj3 然后执行function b()function c()

我看到一些包总是创建新对象并在第二个参数中传递一个对象。

例如:let test = new B('test', { a: 10, b: 20 }); (B是一个类)

看起来像是根据对象键执行某些操作。

最佳答案

这里最好的选择(除非更多上下文可能建议完全不同的方法)是将这些函数放入对象或映射中,然后使用属性名称作为该对象或映射的键来进行调用:

const functions = {
a() {
console.log('a');
},
b() {
console.log('b');
},
c() {
console.log('c');
}
};

let obj1 = {a:1};
let obj2 = {a:1, c:1};
let obj3 = {b:1, c:2};

function callForObj(label, obj) {
console.log(label);
for (const key of Object.keys(obj)) {
functions[key]();
}
}

callForObj("obj1:", obj1);
callForObj("obj2:", obj2);
callForObj("obj3:", obj3);

它使用Object.keys并且纯粹基于具有该键的属性的对象(忽略该值)。如果您想考虑值,请使用 Object.entries 代替,也许还需要解构:

function callForObj(label, obj) {
console.log(label);
for (const [key, value] of Object.entries(obj)) {
if (value) {
functions[key]();
}
}
}

const functions = {
a() {
console.log('a');
},
b() {
console.log('b');
},
c() {
console.log('c');
}
};

let obj1 = {a:1};
let obj2 = {a:1, c:1};
let obj3 = {b:1, c:2};

function callForObj(label, obj) {
console.log(label);
for (const [key, value] of Object.entries(obj)) {
if (value) {
functions[key]();
}
}
}

callForObj("obj1:", obj1);
callForObj("obj2:", obj2);
callForObj("obj3:", obj3);

<小时/>

注意:如果调用的顺序很重要,我建议使用数组而不是对象。尽管 ES2015 为对象属性添加了顺序,并且 ES2020 要求 Object.keysentries 以及 for-in 遵循它(ES2015 没有这样做) t),它仍然很脆弱,因为对于非索引命名的属性,它取决于它们的创建顺序:

console.log(Object.keys({a: 1, b: 2})); // ["a", "b"]
console.log(Object.keys({b: 2, a: 1})); // ["b", "a"]

关于javascript - 根据obj键执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60833598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com