gpt4 book ai didi

javascript - 如何将 JSON 对象结构转换为点表示法?

转载 作者:IT老高 更新时间:2023-10-28 13:24:26 24 4
gpt4 key购买 nike

我有一个要存储的变量,它将指示要从查询中排除哪些字段:

excludeFields = {
Contact: {
Address: 0,
Phone: 0
}
}

我需要将其转换为与 Mongo 的 findOne 一起使用的点表示法,例如:

things.findOne({}, {fields: {'Contact.Address': 0, 'Contact.Phone': 0}})

仅传递 excludeFields 不起作用并导致错误,“投影值应为 1、0、true 或 false 之一”

things.findOne({}, {fields: excludeFields})

我是否必须编写自己的函数才能从层次结构转换为平面点表示法?还是有一些我不知道的 JavaScript 机制可以做到这一点?

最佳答案

这应该足够灵活,可以满足大多数需求:

function dotNotate(obj,target,prefix) {
target = target || {},
prefix = prefix || "";

Object.keys(obj).forEach(function(key) {
if ( typeof(obj[key]) === "object" && obj[key] !== null ) {
dotNotate(obj[key],target,prefix + key + ".");
} else {
return target[prefix + key] = obj[key];
}
});

return target;
}

像这样在 excludesFields 变量上运行:

dotNotate(excludeFields);

它返回当前结构:

{ "Contact.Address" : 0, "Contact.Phone" : 0 }

所以你甚至可以做,内联:

things.findOne({}, {fields: dotNotate(excludeFields) })

或作为投影提供:

var projection = { "fields": {} };
dotNotate(excludeFields,projection.fields);
things.findOne({}, projection);

在所有深度上都可以很好地工作,甚至以基本的方式处理数组,除非您需要像 $push 这样的运算符。

关于javascript - 如何将 JSON 对象结构转换为点表示法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005575/

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