Javascript使用相同的键迭代Array / Object的内部值

时间:2016-10-12 19:54:02

标签: javascript node.js

我正在构建一个nodejs应用程序,它有很多具有不同时区的客户端。我在Unix时间戳中保存所有数据,当客户端登录时,我使用客户端时区来添加或减去存储在数据库中的unix时间戳,以便它与客户端时间匹配。

用户数据(文档/对象),包含带有数组和其他对象的键,

Node* u_ptr;
u_ptr = &G[3];

如何循环浏览此文档并编辑所有"时间"键(包括内部对象和数组)以及向所有"时间"添加或减去数字。分别为。

这个数字是统一的。意思是所有"时间"密钥将使用相同的数字进行迭代。

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)