我正在构建一个nodejs应用程序,它有很多具有不同时区的客户端。我在Unix时间戳中保存所有数据,当客户端登录时,我使用客户端时区来添加或减去存储在数据库中的unix时间戳,以便它与客户端时间匹配。
用户数据(文档/对象),包含带有数组和其他对象的键,
Node* u_ptr;
u_ptr = &G[3];
如何循环浏览此文档并编辑所有"时间"键(包括内部对象和数组)以及向所有"时间"添加或减去数字。分别为。
这个数字是统一的。意思是所有"时间"密钥将使用相同的数字进行迭代。
答案 0 :(得分:1)
我想你会想要使用递归for...in
循环来解决这个问题。
这样的事情:
function changeTime (inputObj, newTimeVal) {
var key;
for (key in inputObj) {
if (key === "time") {
inputObj[key] = newTimeVal;
}
if (typeof inputObj[key] === 'object') {
changeTime(inputObj[key], newTimeVal);
}
}
}
可能不完全正确,但它应该让你走上正确的道路。
编辑: 如果您只想添加或减去原始值,那么使用相同的模式就足够了:
function changeTime (inputObj, delta) { // we'll always add here-- you can pass in a negative or positive number to account for add or subtract
var key;
for (key in inputObj) {
if (key === "time") {
inputObj[key] = inputObj[key] + delta;
}
if (typeof inputObj[key] === 'object') {
changeTime(inputObj[key], delta);
}
}
}
答案 1 :(得分:1)
你可以这样做:
var obj = {
name: "data",
location: "us",
activity: [],
time: 1476301165252,
subdoc: [{
time: 1476301165252,
}]
};
function iterate(obj) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
if (typeof obj[property] == "object") {
iterate(obj[property], property);
} else {
if (property === 'time') {
console.log(property + " " + obj[property]);
}
}
}
}
}
iterate(obj)
https://jsfiddle.net/uxqgd8cf /
答案 2 :(得分:-1)