JavaScript - 遍历对象

标签 javascript ecmascript-6

我有一个这样的对象,它是从外部端点获取的,因此无法更改:

let obj = {
  0: { "time": 1, "day": 1, },
  1: { "time": 2, "day": 1, },
  2: { "time": 3, "day": 1, },
  3: { "time": 1, "day": 2, },
  4: { "time": 2, "day": 2, },
  5: { "time": 3, "day": 2, }
}

我需要把它变成这样的格式:

1: {
  1: { "time": 1, "day": 1 },
  2: { "time": 2, "day": 1 },
  3: { "time": 3, "day": 1 },
},
2: {
  1: { "time": 1, "day": 2 },
  2: { "time": 2, "day": 2 },
  3: { "time": 3, "day": 2 },
}

第一个键是日期,第二个键是时间。

我的尝试没有成功

let obj = {
  0: { "time": 1, "day": 1, },
  1: { "time": 2, "day": 1, },
  2: { "time": 3, "day": 1, },
  3: { "time": 1, "day": 2, },
  4: { "time": 2, "day": 2, },
  5: { "time": 3, "day": 2, }
}

let test = {}

let defaultRow = {
  1: {},
  2: {}
}

Object.keys(obj).forEach((key) => {
  if (!test[obj[key]["day"]]) {test[obj[key]["day"]] = defaultRow}
  test[obj[key]["day"]][obj[key]["time"]] = obj[key]                                   
})

console.log(test)

出于某种原因,这两天包含相同的数据。我怎样才能做到这一点?感谢您的帮助!

最佳答案

Both days contain the same data for some reason

因为您为每一行分配了相同的对象引用 defaultRow。一个简单的修复方法是将 defaultRow 变成一个每次都返回一个新对象的函数

let obj = {
  0: { "time": 1, "day": 1, },
  1: { "time": 2, "day": 1, },
  2: { "time": 3, "day": 1, },
  3: { "time": 1, "day": 2, },
  4: { "time": 2, "day": 2, },
  5: { "time": 3, "day": 2, }
}

let test = {}

let defaultRow = function() {
  return {
    1: {},
    2: {}
  }
}

Object.keys(obj).forEach((key) => {
  if (!test[obj[key]["day"]]) {
    test[obj[key]["day"]] = defaultRow();
  }
  test[obj[key]["day"]][obj[key]["time"]] = obj[key]
})

console.log(test)

问题的简单例子

var obj ={a:1},
    foo = obj,
    bar = obj;

foo.a=2;
console.log(bar.a) //returns  2 because is same object as foo

关于JavaScript - 遍历对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45506367/

相关文章:

javascript - 除了一个键,我如何克隆一个 JavaScript 对象?

javascript - 如何将值从 HTML 页面传递到 Java 小程序?

javascript - Z 索引不起作用

javascript - socket.io 与 socket.io-redis : get all socket object in a room

javascript - 从 html 调用外部 javascript

javascript - 使用 jquery 在特定时间间隔自动切换/动画 css 类

javascript - 为什么 JS 模块在浏览器和服务器中的加载方式不同(异步和同步)?

javascript - ES6 箭头函数的 return 语句中的括号有什么作用?

javascript - 如何查找数组中的多个元素 - Javascript,ES6

javascript - 这个 Lodash uniqBy 调用的 Ramda 等价物是什么?