Javascript повторил внутренние значения массива / объекта с тем же ключом

Я создаю приложение nodejs и у него очень много клиентов с разными часовыми поясами. Я сохраняю все данные в отметке времени Unix, когда клиент входит в систему, я использую часовой пояс клиентов для добавления или вычитания к отметке времени unix, хранящейся в базе данных, так, чтобы она соответствовала времени клиентов.

Пользовательские данные (документ / объект) имеют ключи с массивами и другими объектами,

{
 name: "data",
 location": "us",
 activity: [],
 time: 1476301165252,
 subdoc: [{
          time: 1476301165252,
          someotherKeys: ....
         }]

}

Как я могу просмотреть этот документ и отредактировать все «временные» ключи (включая внутренние объекты и массивы), а также добавить или вычесть число на все «временные» клавиши соответственно.

Число будет равномерным. что означает, что все клавиши времени будут повторяться с одинаковым номером.

javascript,node.js,

1

Ответов: 3


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);
        }
    }
}

Возможно, это не совсем правильно, но это должно привести вас к правильному пути.

edit: Если вы хотите только добавить или вычесть из исходного значения, достаточно просто использовать тот же шаблон:

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

Вы могли бы сделать что-то вроде этого:

    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/


JavaScript, Node.js,
Похожие вопросы