cakephp函数,如在Javascript中的Set::合并

wmomyfyw  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(127)

是否已经有一些javascript函数在浏览器中的客户端执行与cakephp函数Set::合并和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。但这不仅仅是这个简单的例子,我真的在寻找一个库或类似的东西,可以做它在一个类似的方式cakephp。谢谢提前很多!

mhd8tkvw

mhd8tkvw1#

没有。Javascript没有类似的内置功能。
您可以自己创建这些函数,也可以使用Underscore.js之类的库,它提供了许多类似的实用程序。

k4emjkb1

k4emjkb12#

我***很想***看到一个相当于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

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

.automobiles .maker:val("Honda") .model

$.automobiles[?(@.maker='Honda')].model
JMESPath是我的首选。

ippsafx7

ippsafx73#

这在纯JavaScript中相当容易:

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

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

相关问题