【问题标题】:jade get object keyname in iteration玉在迭代中获取对象键名
【发布时间】:2016-02-08 10:59:36
【问题描述】:
var data = {
  thing: 'value1',
  thing2: 'value2',
  thing3: 'value3'
};

each val, index in data
    li= val.keyname??

我想要的输出是:

<li>thing</li>
<li>thing2</li>
<li>thing3</li>

这可能吗?

我尝试只使用“索引”,但它迭代了附加到对象的整个属性列表和原型函数,例如$__, isNew, errors, _doc, $__original_save, save, _pres, _posts, toObject, toJSON, $__isNested等..

data 来自 MongoDB 的 find 查询的一部分。

在我的用例中,我事先不知道键的名称。

【问题讨论】:

    标签: javascript json node.js pug


    【解决方案1】:

    使用库 UnderscoreJS 的 invert 方法。 Underscorejs.org

    【讨论】:

    • 几乎.. 但假设这些值是唯一的,而且它们绝对不是(在我的用例中)。虽然它可以在我给出的例子中工作。
    【解决方案2】:

    数据必须是简单的键值对象。

    如果您有最复杂的对象(例如模型或集合),请使用 toJSON 模式,例如 Backbone.ModelBackbone.Collection

    如果您有一个简单的对象,请像这样使用each val, idx

    ul
      each val, idx in data
        li= idx
    

    完整代码:http://jsfiddle.net/tomi77/5rb5hspk/2/

    【讨论】:

    • 如此接近,但这与索引的作用相同,也遍历所有原型属性;如 OP 中所列。
    • 很好,这里:{ albany: 'a3', penrose: 'a3', christchurch: 'a4' },问题是数据中的对象在传递到玉后附加了一堆原型值,并且迭代也在经历所有这些值.
    • 好的,我明白了。使用toJSON 模式,如Backbone.ModelBackbone.Collection。示例:jsfiddle.net/tomi77/5rb5hspk/2
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2013-07-14
    • 2011-11-18
    • 1970-01-01
    相关资源
    最近更新 更多