如何通过 js对json的键值成员做存在与否的条件的判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过 js对json的键值成员做存在与否的条件的判断相关的知识,希望对你有一定的参考价值。

比如我有一个目标网页正常情况下请求就能够返回一个Json格式的JavaScript 的用户数据对象
var JSONObject
= "id":"4","playerid":"604563462527849255","name":"yoyi","level":"1"
里面包含有id,playid,name,level四个名称的键值对,但是特殊情况下只能够返回三个名称键值对
var JSONObject
= "id":"4","playerid":"604563462527849255","name":"yoyi"
因此我希望增加设计一个对JavaScript用户对象四个键值存在与否的条件判断,比如判断"level"这个键值在异常情况下返回的对象是否存在,我们知道正常情况下我们通过
JSONObject.id
JSONObject.playid
JSONObject.name
JSONObject.level
就可以正常访问到四个键值,但是我不知道,如果某个键值不存在的时候如何做这个条件判断
注意这是json对象用一般的判断js对象是否存在属性的方法
alert(JSONObject..hasOwnProperty('Propertyname'));或者是
if(action.result["getgold"] != undefined) //todo;测试是会报错的

参考技术A if(!JSONObject.id)
// TODO

本回答被提问者和网友采纳

如何从另一个模式中获取特定的键值,通过比较它们是不是具有相同的键值?

【中文标题】如何从另一个模式中获取特定的键值,通过比较它们是不是具有相同的键值?【英文标题】:How can I get a specific key value from another schema, By comparing if they have same key value?如何从另一个模式中获取特定的键值,通过比较它们是否具有相同的键值? 【发布时间】:2021-06-14 20:13:39 【问题描述】:

我有 Node.js 应用程序,由 express 提供服务,我有两个不同的猫鼬模式 userModel 和 postMode,我的前端是用 React.js 制作的。我正在创建一个将创建和显示帖子的组件。显示帖子将包含用户名、头像、日期、文本和图像。问题是头像在 userModel 中。有没有办法我也可以显示另一个模式的头像?我想我会根据它们是否具有相同的键值来比较这两个模式,因为它们都有用户名。为了显示帖子,我发送 Axios 以获取基于 postModel 的请求。

Backend
export const getUserRelatedPost = asyncHandler(async (req, res) => 
  const postData = await postModel.find();
  res.json(postData);
);

架构 后模型

用户模型

谢谢!

【问题讨论】:

我不完全确定我理解您的要求,但在查看您共享的两个架构时,用户名元素中的值不匹配。 我认为更好的方法是在您的帖子中嵌入用户数据或创建一个引用(然后填充)到 UserModel。当您创建新帖子时,您可以限制您提出的请求数量。 @ScottGnile 我很抱歉,但这两个用户名都应该是 johndoe。我想要的输出是我想从 userModel 获取头像值,以便我可以在我的帖子组件上使用它,但问题是 postModel 是我在帖子组件上使用的那个。 @VoQuocThang 先生,你能给我一些关于如何做到这一点的链接吗?谢谢! @rjc30 这里是填充方法:***.com/questions/38051977/… 【参考方案1】:

你可以使用猫鼬的填充功能

https://mongoosejs.com/docs/populate.html

在您的 postModel 中添加一个虚拟“用户”元素

const postSchema = Schema(
    //your existing postModel definition

);

postSchema.virtual('user', 
    ref: 'User',
    localField: 'username',
    foreignField: 'username',
    justOne: true
);

我假设您的 userModel 导出用户是这样的:

const userSchema = Schema(
    //your existing userModel definition
)

const User = model('User', userSchema);

那么在你的快递路线中,你应该能够做这样的事情:

export const getUserRelatedPost = asyncHandler(async (req, res) => 
    const postData = await postModel.find()
        .populate(
            path: 'user',
            select: 'avatarPhoto'
        );
    //you should be able to access the avatar photo(s) like this
    console.log(postData.map(u => u.user.avatarPhoto)

    res.json(postData);
);

【讨论】:

这假设两个模型中用户名中的值是相同的 感谢您的帮助! 如果我使用 .find 会出现问题,avatarPhoto 未定义,但如果我使用 .findOne,它会起作用。 没错,find 返回的是一个数组,而不是一条记录……我的错。 是的,我仍在寻找解决此问题的方法。感谢您的帮助!

以上是关于如何通过 js对json的键值成员做存在与否的条件的判断的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么样获取Map中第几个键值对

js如何通过相同键值合并两个json数组

当用户从 Vue.js 中的 JSON 对象中选择第一个键时,如何显示剩余的键值?

pig 新手,如何使用 pig 中的键值对子集将 JSON 转换为另一个 JSON?

如何从 JSON 对象中获取特定的键值

ES6对象的新增方法