javascript - 迭代 Meteor Blaze 中的对象

标签 javascript html mongodb meteor meteor-blaze

我有一个嵌套对象的数据结构。这是一个具有唯一 id 键的 map 。

每个键都包含另一个映射,该映射由另一组唯一的 id 键(对应于 Mongo 文档的 _id)组成。这些键中的每一个都包含一个 Mongo Document。

/image/1IeTJ.jpg这是 Chrome 开发工具中数据结构的示例。

我想在 Blaze 中迭代这一点。我的目标是有一个显示顶级键(本例中为 1 和 2)的标题......然后对于每个顶级键,有一个表,其中每行都是一个嵌套文档。

据我了解,Blaze 只能迭代数组和游标,而不能迭代 JS 对象。 https://github.com/meteor/meteor/issues/3884所以我使用 _.pair 将嵌套对象序列化到数组中,这是我的结果 /image/qojXj.jpg

不过,我无法通过 2D 数组获得我想要的东西。因为现在我的顶级键(本例中为 1 和 2)位于数组的第一个索引处。我不知道如何在每个内部访问它。

简而言之,这是我的全部目标 IE。

{{#each 2dArray}}
    print {{this[0]}}
    <table>
        {{#each this[1]}}
            <tr>{{nestedThis.data}}</tr>
        {{/each}}
   </table>
{{/each}}

有人知道如何做到这一点,或者还有更好的方法来构建我的数据吗?谢谢

最佳答案

您应该能够按如下方式重组数据

input = {
 1: {
   bob001: {_id: "bob001", name: "Bob" },
   jim002: {_id: "jim002", name: "Jim" },
 },
 2: { 
   kim001: {_id: "kim001", name: "Kim" },
   sue002: {_id: "sue002", name: "Sue" },
 }
}
 
 console.log(input);
 
 output = Object.keys(input).map(key => {
   return {
     key: key,
     data: Object.values(input[key]).map(row => {
       return Object.keys(row).map(k => {
         return {key: k, data: row[k]};
       });
     })
   }
})
 
console.log(output);

在您的组件中,将输入重组为新的 ReactiveVar。在 $autorun 中执行此操作,假设输入是响应式的(感谢@Jankapunkt):

Template.my_template.onCreated({
  this.formattedData = new ReactiveVar([]);
  this.$autorun(() => {
    const input = this.input; // get this from somewhere reactive?...
    this.formattedData = Object.keys(input).map(key => {
      return {
        key: key,
        data: Object.values(input[key]).map(row => {
          return Object.keys(row).map(k => {
            return {key: k, data: row[k]};
          });
        })
      }
    })
  })
})

然后你可以使用 blaze 来显示它:

  {{#each formattedData}}
    print {{key}}
    <table>
      {{#each data}}
        <tr>
        {{#each this}}
          <td>{{key}}: {{data}}</td>
        {{/each}}
        </tr>
      {{/each}}
    </table>
  {{/each}}

关于javascript - 迭代 Meteor Blaze 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59185078/

相关文章:

Javascript - PHP 在 JavaScript 上的 Substr() 替代品

mongodb - 如何在容器重启之间持久化 MongoDB 数据?

javascript - 变化时多行之间的时间差和总和

javascript - 从 JSON 文件调用整个 Highchart API

javascript - Bootstrap 4 中的 Navbar 药丸颜色填充全高

html - 无论屏幕尺寸如何,都能在网站上显示 100% 的图像背景

MONGODB 简单查询太长而无法执行为什么?

ruby - 不运行 mongodb 的 mongoid 单元测试

javascript - Firefox 插件 - 无法触发任何类型的点击事件

javascript - 获取多个元素: only return the last one