cakephp的功能类似于Javascript中的Set :: combine

时间:2012-12-22 15:50:04

标签: javascript cakephp set

是否已经有一些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类似的方式完成它的库或其他东西。 非常感谢提前!

3 个答案:

答案 0 :(得分:1)

没有。 Javascript没有像这样内置的东西。

您自己制作这些功能,或者使用像Underscore.js这样的库,它提供了很多这样的工具。

答案 1 :(得分:1)

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

在蛋糕中,我经常做这样的事情......

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

如果有人知道这样做的JS库,那将非常感谢提示。


编辑:我已经找到了一些选项,允许这种查询JSON数据(使用他们使用的语法示例)。

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

  • json:select()(受CSS选择者启发更多)
    .automobiles .maker:val("Honda") .model

  • JSONPath(受XPath启发更多)
    $.automobiles[?(@.maker='Honda')].model

我认为JSPath看起来最好,所以我将尝试将它与我的AngularJS + CakePHP应用程序集成。

答案 2 :(得分:0)

在纯javascript中这很容易:

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

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