【问题标题】:cakephp functions like Set::combine in Javascriptcakephp 函数,如 Javascript 中的 Set::combine
【发布时间】:2012-12-22 15:50:04
【问题描述】:

是否已经有一些 javascript 函数与浏览器客户端的 cakephp 函数 Set::combine 和 Set::classicExtract 相同? http://book.cakephp.org/2.0/en/core-utility-libraries/set.html

这样我就可以带这个数组了:

a = [
   {
        'User' : {
            'id' : 2,
            'group_id' : 1,
            'name' : 'Alfred'
         }
    },
    {
        'User' : {
            'id' : 12,
            'group_id' : 2,
            'name' : 'Albert'
         }
    }
]

具有类似

的功能
Set::combine(a, '{n}.User.id', '{n}.User.name') 

进入格式

a = {
  2 : 'Alfred',
  12 : 'Albert' 
}

例如。但这不仅仅是这个简单的例子,我真的在寻找一个库或可以以类似于 cakephp 的方式完成它的东西。 提前非常感谢!

【问题讨论】:

    标签: javascript cakephp set


    【解决方案1】:

    没有。 Javascript 没有这样的内置功能。

    您要么自己制作这些函数,要么使用诸如Underscore.js 之类的库,它提供了很多这样的实用程序。

    【讨论】:

      【解决方案2】:

      我希望喜欢看到与 CakePHP 的 Hash 类等效的 JS,但遗憾的是,经过一个小时的谷歌搜索,我找不到任何东西...... Underscore.js 和 Sugar .js 都有一些过滤功能,但似乎都不适用于多维数组。

      在 Cake 我经常做这样的事情...

      Hash::extract($users, '{n}.User.Posts.{n}.Comments.{n}[published=1]');
      

      如果有人知道这样做的 JS 库,将不胜感激。


      编辑:我后来发现了一些选项,它们允许对 JSON 数据进行这种查询(带有它们使用的语法示例)。

      • JMESPath(可能是最成熟的选择)
        automobiles[?maker == 'Honda' && year > 2009].model

      • JSPath
        .automobiles{.maker === "Honda" && .year > 2009}.model

      • json:select()(更多灵感来自 CSS 选择器)
        .automobiles .maker:val("Honda") .model

      • JSONPath(更多灵感来自 XPath)
        $.automobiles[?(@.maker='Honda')].model

      JMESPath 是我的首选。

      【讨论】:

        【解决方案3】:

        这在纯 javascript 中相当容易:

        result = {}
        a.forEach(function(item) {
            result[item.User.id] = item.User.name;
        })
        

        我知道这只是一个简单的例子,但关键是javascript支持回调和一流的函数,根本不需要像“{n}.User.name”这样的魔法。

        【讨论】:

        • 如果不需要它,这样的事情就不会存在。在像{n}.User.Order.Product.name 这样的复杂结构上使用Hash::extract() 比多次使用foreach 容易得多。也不需要检查变量是否真的存在。当foreach 需要对每个不同的结构进行处理时,它也适用于任何结构,而不是 DRY。
        • @dogmatic69:“如果不需要它,它就不会存在”——我不认同这个逻辑。有很多东西,特别是在计算方面,完全没用 - 但仍然存在。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2013-01-22
        • 2016-03-21
        • 1970-01-01
        • 2019-04-03
        • 2017-04-08
        相关资源
        最近更新 更多