gpt4 book ai didi

Javascript - 更新对象属性的函数

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

我想要更新元素属性的功能。像这样的事情

function updateElement(element, propName, value){
element[propName] = value;
}

执行将如下所示:

updateElement(item, "name", "foo")

它正在工作,但我想将 propName 作为函数传递以避免 string: 类似这样的内容:

updateElement(item, x => x.name, "foo");

但我不确定这个的实现应该是怎样的,我有类似的东西,但它不起作用

function updateElement(element, mapFn, value){
mapFn(element) = value;
}

你能帮我吗?

编辑我想要更通用的解决方案,并且我想避免硬编码字符串,例如我有:

let item = {name: 'foo', address: {...}, ...};

我想以这种方式调用我的函数:

updateElement(item, x => x.name, "foo") <- it will update name, or


updateElement(item, x => x.address, newAddress) <- it will change prop of address

最佳答案

这是我的评论的扩展,但您可以使用带有签名的回调:

( object: Object, value: any ) => // Do stuff

以下是验证预定义属性并将值设置为预定义属性的函数的实现。

想法:

  • 创建一个接受回调并返回处理函数的包装函数。
  • 处理函数定义的行为与对象无关。
  • 您可以在任何对象上调用此函数,并会产生相同的副作用。

这种方法的好处是,您可以创建通用验证器和 setter 函数。

function updateElement(setCallback, validateCallback) {
return function setValue(object, value) {
if(!validateCallback || validateCallback(value)) {
setCallback(object, value)
} else {
console.log("Error: Passed value is incorrect");
}
}
}

const dummy = {};

const setNameFn = updateElement((context, value) => context.name = value)
const setAgeFn = updateElement((context, value) => context.age = value, (value) => !isNaN(value));

setNameFn(dummy, 'foo');
setAgeFn(dummy, 'bla')
setAgeFn(dummy, 20);

console.log(dummy);

关于Javascript - 更新对象属性的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556449/

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