【问题标题】:Javascript - Add multiple dynamic values to dynamic key in for loopJavascript - 将多个动态值添加到 for 循环中的动态键
【发布时间】:2014-11-10 04:04:52
【问题描述】:

我有一个循环,我想为前端编译一个对象。

循环设置一个用户、小时数和时间戳变量,我想从中动态创建新对象。

这是我迄今为止所拥有的,它不起作用,因为它显然只是替换了用户。任何帮助都是解决此问题的最佳方式,谢谢。

var Things = { /* big dump of data */ };
var usersHours = {};

for (var i = Things.length - 1; i >= 0; i--) {

    var user = Things[i].user;
    var hours = Things[i].hours;
    var timeStamp = Things[i].timeStamp;

    var hoursAdd = {};

    hoursAdd[timeStamp] = hours;
    usersHours[user] = hoursAdd;

};


// example of wanted final output

var usersHours = {

    user1 : {
        1406178757855 : 10:00,
        1406178743473 : 04:00,
        1406178759600 : 04:44
    },
    user2 : {
        1406178475847 : 01:30,
        1406193847384 : 07:00,
        1406984783487 : 08:44
    },
    user3 : {
        1406173847787 : 01:40,
        1406139847873 : 07:14,
        1406183748374 : 08:34
    }
}

【问题讨论】:

  • Things[i].user 给你什么,因为它只会在每次都相同的情况下被覆盖,你能举个例子说明Things 中的内容
  • @Quince 感谢您的回复。在这种情况下,事物是一个 Firebase 数组。循环比我在尝试使问题简单的问题中要复杂一些。

标签: javascript arrays json javascript-objects


【解决方案1】:

因此,您可以测试用户是否已经拥有数据,以及他们是否没有准备好创建一个空白对象,除了正在添加的新数据。在下面的示例中,如果同一用户的任何时间戳相同,则数据将被覆盖。

Things = [{
    user: "user1",
    hours: "5",
    timestamp: "12312312322"
  }, {
    user: "user1",
    hours: "2",
    timestamp: "12322312322"
  }, {
    user: "user1",
    hours: "1",
    timestamp: "12312392322"
  }, {
    user: "user2",
    hours: "5",
    timestamp: "12312312322"
  }, {
    user: "user2",
    hours: "2",
    timestamp: "12322312322"
  }, {
    user: "user2",
    hours: "1",
    timestamp: "12312319322"
  }, {
    user: "user3",
    hours: "5",
    timestamp: "12312312322"
  }, {
    user: "user3",
    hours: "2",
    timestamp: "12322312522"
  }, {
    user: "user3",
    hours: "1",
    timestamp: "123123222322"
  },

]

var usersHours = {};
for (var i = Things.length - 1; i >= 0; i--) {

  var user = Things[i].user;
  var hours = Things[i].hours;
  var timeStamp = Things[i].timestamp;



  //test if user has already got data
  if (!usersHours[user]) {
    usersHours[user] = {};
  }
  

//set/or possibly override a timestamp for the user with the hours
  usersHours[user][timeStamp] = hours;

};

console.log(usersHours);

【讨论】:

    【解决方案2】:

    如果您需要多个动态值,则需要使用数组而不是键。键有一对,数组可以保存你需要的数据。

    【讨论】:

    • 感谢您的回复。那么在这种情况下,我将为每个用户构建多个数组?
    • 是的。数据应该以数组的形式分层,所以当你认为你可能会指定更多关于键的信息时,请使用数组。
    猜你喜欢
    • 2014-05-20
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2021-10-25
    • 2018-01-03
    相关资源
    最近更新 更多