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

我正在构build一个nodejs应用程序,它有很多不同时区的客户端。 我将所有数据保存在Unix时间戳中,当客户端login时,我使用客户端时区对存储在数据库中的unix时间戳进行加或减,以使其匹配客户端时间。

用户数据(一个文档/对象),也有数组和其他对象的键,

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

我怎样才能循环这个文件,并编辑所有的“时间”键(包括内部对象和数组以及),并分别加上或减去一个数字,所有的“时间”键。

号码将是统一的。 这意味着所有的“时间”键将被重复使用相同的数字。

你会想要使用一个recursionfor...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); } } } 

你可以做这样的事情:

  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中https://www.google.com.tr/url?sa=t&source=web&rct=j&url=https://developer.mozilla.org/en-US/docs/networking/ JavaScript的/参考/语句/为…在与VED = 0ahUKEwiJ7q6WhtbPAhUkAsAKHXehDAkQFggaMAA与USG = AFQjCNGzYTP9ERuhLVoFVYR52HohZmZ0eQ&SIG2 = N_sNA5ZjKyeVmCjEisDNDQ