gpt4 book ai didi

javascript - 使用 Javascript 递归替换未知大小对象中的键

转载 作者:行者123 更新时间:2023-11-30 19:01:07 24 4
gpt4 key购买 nike

我希望能够使用 Javascript 替换动态大小对象中的某些。例如,我有一个看起来像这样的对象:

var obj = {
where: {
hypes: {
lte: 12 <-- replace key
},
or: [
{
hypes: {
lt: 14 <-- replace key
}
},
{
id: {
lt: 10 <-- replace key
}
}
]
}
}

为了让此对象与 Sequelize 一起使用,我需要将以下键转换为 Sequelize 运算符:lt,以及lte。我创建了一个用作字典的 operators 对象,因此我可以从中提取 Sequelize 运算符:

const operators = {
'eq': [Op.eq],
'lte': [Op.lte],
'lt': [Op.lt],
'or': [Op.or]
};

我在想我可以使用 operators 对象来匹配 obj 的键并将其替换为 operators 对象的值.我想我可以使用以下递归函数循环遍历 obj 给定它的未知大小:

const iterate = (obj) => {
Object.keys(obj).forEach(key => {

console.log(`key: ${key}, value: ${obj[key]}`)

if (typeof obj[key] === 'object') {
iterate(obj[key])
}
})
}

上述函数将检查键的值是否为对象,并再次调用iterate() 方法。

因此我可以调用:iterate(obj) 它将递归映射对象中的所有嵌套属性。

我遇到的问题是,当键与 operators 对象中的属性匹配时,我该如何替换它们,以便我最终得到一个看起来像这样的 obj像这样:

var obj = {
where: {
hypes: {
lte: 12
},
[Op.or]: [ <-- changed
{
hypes: {
[Op.lt]: 14 <-- changed
}
},
{
id: {
[Op.lt]: 10 <-- changed
}
}
]
}
}

谢谢!

最佳答案

您可以采用递归方法。

function replace(object) {
return Array.isArray(object)
? object.map(replace)
: object && typeof object === 'object'
? Object.fromEntries(Object
.entries(object)
.map(([k, v]) => [k in operators ? operators[k] : k, replace(v)])
)
: object;
}

var obj = { where: { hypes: { lte: 12 }, or: [{ hypes: { lt: 'xx' } }, { id: { lt: 10 } }] } };

const operators = { eq: '[Op.eq]', lte: '[Op.lte]', lt: '[Op.lt]', or: '[Op.or]' };

console.log(replace(obj));

关于javascript - 使用 Javascript 递归替换未知大小对象中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505246/

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