2

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

4

3 回答 3

1

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

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

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

如果有人知道执行此操作的 JS 库,将非常感谢您的提示。


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

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

  • JS路径
    .automobiles{.maker === "Honda" && .year > 2009}.model

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

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

JMESPath 是我的首选。

于 2013-03-31T07:40:04.123 回答
1

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

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

于 2012-12-22T16:10:23.747 回答
0

这在纯 javascript 中相当容易:

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

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

于 2012-12-22T16:17:17.797 回答