Javascript中的Set::combine等cakephp函数

Javascript中的Set::combine等cakephp函数,javascript,cakephp,set,Javascript,Cakephp,Set,是否已经有一些javascript函数与浏览器客户端上的cakephp函数Set::combine和Set::classicExtract执行相同的操作? 这样我就可以带上这个阵列: a = [ { 'User' : { 'id' : 2, 'group_id' : 1, 'name' : 'Alfred' } }, { 'User' : {

是否已经有一些javascript函数与浏览器客户端上的cakephp函数Set::combine和Set::classicExtract执行相同的操作?

这样我就可以带上这个阵列:

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没有类似的内置功能


您可以自己创建这些函数,也可以使用一个库,例如提供了许多类似这样的实用程序的库。

这在纯javascript中相当容易:

result = {}
a.forEach(function(item) {
    result[item.User.id] = item.User.name;
})
我意识到这只是一个简单的例子,但关键是javascript支持回调和一级函数,而且根本不需要像“{n}.User.name”这样的魔法。

。。。Underline.js和Sugar.js都有一些过滤功能,但它们似乎都不适用于多维数组

在蛋糕里我经常做这样的事情

Hash::extract($users, '{n}.User.Posts.{n}.Comments.{n}[published=1]');
如果有人知道一个JS库可以做到这一点,我将非常感谢这个提示


EDIT:我找到了一些允许这种JSON数据查询的选项(以及它们使用的语法示例)

  • (可能是最成熟的选择)
    汽车[?制造商='本田'&&year>2009]。车型


  • .automobiles{.maker==“Honda”&.year>2009}.model

  • (更多灵感来自CSS选择器)
    .automobiles.maker:val(“本田”).model

  • (更多灵感来自XPath)
    $。汽车[?(@.maker='Honda')]。车型


JMESPath是我的首选选项。

如果不需要它,这样的事情就不存在了。在像
{n}.User.Order.Product.name这样的复杂结构上使用
Hash::extract()
比多次使用
foreach
容易得多。也不需要检查变量是否确实存在。它也适用于任何结构,当需要对每个不同的结构进行
foreach
时,而不是枯燥的。@dogmatic69:“如果不需要它,它就不存在”——我不相信这种逻辑。有很多东西,特别是在计算领域,是完全无用的,但仍然存在。