如何解决编辑特定的对象属性,保持相同的对象结构
假设我有这个对象:
a = {
key1: {
name: 'a',import: 1234.7896,discount: 122.34553
}
key2: {
name: 'b'
import: 8976.09998,discount: 12.890999
}
}
我有一个函数,它以某种方式格式化数字并返回一个字符串。应用该函数我想要一个这样的对象:
result = {
key1: {
name: 'a'
import: '1,234.78'
discount: '122.33'
}
key2: {
name: 'b'
import: '8,976.09'
discount: '12.89'
}
}
因此,我的目标是获取所有包含数字的属性并对其进行格式化。 如何迭代对象以仅编辑包含数字的属性并返回具有相同键和不同数字属性的另一个对象?
解决方法
此任务的自然方法是递归。下面我假设您有一个 format
函数,可以根据需要将数字格式化为字符串,并定义 recurseFormat
以递归遍历对象值,查找类型为 "number"
的值以运行format
上。您可能需要修改 typeof value === 'object'
测试以满足何时递归的需要。
function format(number) {
...
}
function recurseFormat(object) {
for (const [key,value] of Object.entries(object)) {
if (typeof value === 'number') {
object[key] = format(value)
} else if (typeof value === 'object') {
recurseFormat(value);
}
}
}
请注意,此代码会就地修改您的对象。如果您想同时深度复制您的对象,可以使用类似的递归方法来完成;让我知道,我可以试着写一下。
,您可以实现也适用于嵌套对象的递归。像这样:
const convertToString=obj=>{
return Object.fromEntries(Object.entries(obj).map(([k,v])=>[k,typeof v=="object" ? convertToString(v) : v.toLocaleString()]))
};
const a = { key1: { name: 'a',import: 1234.7896,discount: 122.34553 },key2: { name: 'b',import: 8976.09998,discount: 12.890999 } };
console.log(convertToString(a));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。