Javascript 使ejs函数在生成器上运行

Javascript 使ejs函数在生成器上运行,javascript,json,underscore.js,generator,Javascript,Json,Underscore.js,Generator,我有几十个作用于数组的函数。为了便于说明,请参见 如您所见,我在大多数操作中使用下划线js 但是,我想在我的主iteratee上编写一个转换,它是一个JSON对象列表,如下所示: var listings = [{ title: 'title1', d: 0, desc: 'hello world', pass: 'qub7s1ya', tags: ["tag1", "tag2"] }] 因为我想真正优化性能,所以我想在desc值上编写一个转换器。为此,

我有几十个作用于数组的函数。为了便于说明,请参见

如您所见,我在大多数操作中使用下划线js

但是,我想在我的主iteratee上编写一个转换,它是一个JSON对象列表,如下所示:

var listings = [{ title: 'title1', d: 0, desc: 'hello world', pass: 'qub7s1ya', tags: ["tag1", "tag2"] }]
因为我想真正优化性能,所以我想在
desc
值上编写一个转换器。为此,我将使用lzutf8;所以我只在磁盘和内存中存储压缩值。在每个下划线JS操作中,我希望对键
desc
的解压缩值执行操作

显然,下划线操作不会直接作用于生成器,所以我的问题是如何实现这一点

Edit1:我相信下划线的所有操作都是顺序的,那么为什么不支持生成器呢?还是我遗漏了什么

Edit2:这些操作是对JSON对象或类似数组中的“键值”执行的操作

_#过滤器、查找位置、位置、拒绝、拾取


起初,我认为生成器能够在运行时更改每个项,使其能够从压缩文本转换为纯文本。类似地(我认为至少目前如此),可以通过将计算属性附加到JSON对象来实现,这在JavaScript中是可能的。比如:

var item = {
    desc: "compressed text", 
}

Object.defineProperty(item, 'desc_', {
  get: function() { return decompress(this.desc) }
});
console.log(item.desc_)
console.log(JSON.parse(JSON.stringify(item)))
这样,我就不用担心其他函数只通过将
desc
替换为
desc\uu
来作用于
desc

显然,使用
Object.defineProperty
添加函数不会影响
JSON.stringify
,这与使用
getter重新定义另一个JSON相反,比如:

var item = {
    desc: "hello world", 
    get desc_(){ return (this.desc.toUpperCase()); },
    toJSON() {
      return {
        desc: this.desc 
      }
  }
}
其中必须定义
toJSON
,否则将计算并持久化
desc
(出于某种原因!)

回到
下划线.js
问题。所有需要的操作似乎都与新的计算属性一起工作

其中的示例:

listings = [{ title: 'title1', d: 0, desc: 'oipfjezojifze', pass: 'qub7s1ya', tags: ["tag1", "tag2"] }]
listings.forEach(item => {
    Object.defineProperty(item, 'desc_', {
        get: function () { return (this.desc.toUpperCase()) }
    });
});
var results = _.where(listings, { desc_: "oipfjezojifze".toUpperCase() })
// it also returns the object intact
console.log(results[0].desc_)
// and other methods _#filter, _#findWhere, _#where, _#reject, _#pick do as well

从我所做的粗略搜索来看,实际上似乎没有多少兴趣。我的意思是,ES6已经5年了……似乎没有人在现代循环或高级迭代器中使用下划线(或lodash),也许,当你有精神和意志力在那里重新编写所有数组函数时。但不是我:)“显然,下划线操作不会直接作用于生成器,所以我的问题是如何实现这一点?”请说明您希望能够做什么,否则将很难回答您的问题。@Bergi“由于ES6,您不再需要下划线”这是一种普遍的情绪,每个人都在彼此重复,但从根本上说这是不真实的。大多数下划线的功能仍然无法从vanilla JavaScript中获得,因此除非您一直想重新发明轮子,否则您可以使用(类似于库的)下划线。