Bil*_*ean 2 javascript json node.js
我正在尝试迭代简单的 json 数组,但它总是返回数组的长度 is undefined。
var chatmessage = {};
...................
...................
socket.on('listmessage', function(mesg){
chatmessage={"message":"Hello", "to":"sjdfjhsdf"};
});
socket.on('private', function(mesg){
console.log(chatmessage.length+' - '+chatmessage.message +' - '+ chatmessage.to);
});
Run Code Online (Sandbox Code Playgroud)
当私有事件被触发时它返回
undefined - Hello - sjdfjhsdf
Run Code Online (Sandbox Code Playgroud)
我认为它将length关键字视为 json 数组键,例如{"length":40}。
我尝试过Object.keys(chatmessage).length但它返回总数键值( 2 ),但我只有一条记录。
在 Node js 中迭代 json 的正确方法是什么
我正在尝试迭代简单的 json 数组
有两个问题:
那不是 JSON。JSON 是一种用于数据交换的文本表示法。如果您正在处理 JavaScript 源代码,而不是处理 string ,那么您就不是在处理 JSON。它是一个 JavaScript 对象初始值设定项。
它不定义数组,而是定义对象。
对象没有length属性。如果您想要chatmessage说明它有多少个属性,则必须显式添加第三个属性(这会引发该值应该是 2 还是 3 :-) 的问题)。或者,您可以将其设置为具有“key”和“value”属性的对象数组,但这使用起来会很尴尬。
如果需要,您可以通过以下几种方式确定对象有多少个属性:
Object.keys(obj).length会告诉你该对象有多少个自己的、可枚举的Symbol属性(如果你使用的是 ES2015,则忽略任何带有名称的属性)。该数字不包括任何继承的属性或任何不可枚举的属性。你的例子中的答案是2。
Object.getOwnPropertyNames(obj).length)会告诉您该对象有多少个自己的属性,无论它们是否可枚举(但再次忽略任何带有Symbol名称的属性)。该数字不包括任何继承的属性或任何不可枚举的属性。您的示例中的答案将再次为 2,因为您的对象没有不可枚举的属性。
我已经尝试过
Object.keys(chatmessage).length,但它返回总数键值(2),但我只有一条记录。
正如我上面所说,Object.keys会告诉你该对象有多少个自己的可枚举属性。如果您想找出有多少个对象,答案是 1。
如果您的目标是发送一系列聊天消息,那么您需要像这样创建:
var chatmessages = [
{"message":"Hello", "to":"sjdfjhsdf"}
];
Run Code Online (Sandbox Code Playgroud)
这定义了一个包含一个条目的数组:代表一条聊天消息的单个对象。多个将用 分隔,:
var chatmessages = [
{"message":"Hello", "to":"sjdfjhsdf"}, // First message
{"message":"Hello again", "to":"sjdfjhsdf"} // Second message
];
Run Code Online (Sandbox Code Playgroud)
请注意,如果您这样做,您的动词可能应该是listmessages(复数),而不是listmessage。(我提到这一点是为了防止您的母语处理复数的方式与英语不同;地球上各种人类语言处理复数的方式有很多不同的方式。:-))
| 归档时间: |
|
| 查看次数: |
1571 次 |
| 最近记录: |