标签: lodash

如何按键对对象数组进行分组

有没有人知道(如果可能的话,还是lodash)通过对象键对对象数组进行分组,然后根据分组创建一个新的对象数组?例如,我有一个汽车对象数组:

var cars = [
    {
        'make': 'audi',
        'model': 'r8',
        'year': '2012'
    }, {
        'make': 'audi',
        'model': 'rs5',
        'year': '2013'
    }, {
        'make': 'ford',
        'model': 'mustang',
        'year': '2012'
    }, {
        'make': 'ford',
        'model': 'fusion',
        'year': '2015'
    }, {
        'make': 'kia',
        'model': 'optima',
        'year': '2012'
    },
];
Run Code Online (Sandbox Code Playgroud)

我想制作一个新的汽车对象数组,按以下方式分组make:

var cars = {
    'audi': [
        {
            'model': 'r8',
            'year': '2012'
        }, {
            'model': 'rs5',
            'year': '2013'
        },
    ],

    'ford': [
        {
            'model': 'mustang',
            'year': '2012'
        }, {
            'model': 'fusion',
            'year': …
Run Code Online (Sandbox Code Playgroud)

javascript arrays grouping object lodash

102
推荐指数
14
解决办法
15万
查看次数

Javascript ES6/ES5在数组中查找并更改

我有一个对象数组.我想通过某个字段找到,然后改变它:

var item = {...}
var items = [{id:2}, {id:2}, {id:2}];

var foundItem = items.find(x => x.id == item.id);
foundItem = item;
Run Code Online (Sandbox Code Playgroud)

我希望它能改变原始对象.怎么样?(我不在乎它是否也会在lodash)

javascript arrays ecmascript-6 lodash

99
推荐指数
6
解决办法
11万
查看次数

使用lodash来比较数组(没有订单的项目存在)

我知道我可以使用循环来做到这一点,但我试图找到一种优雅的方式来做到这一点:

我有两个数组:

var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];
Run Code Online (Sandbox Code Playgroud)

我想用lodash确认两者是一样的."相同"是指array1中没有包含在array2中的项目.

在检查这些项目之间的相等性方面:

['a', 'b'] == ['b', 'a'] 
Run Code Online (Sandbox Code Playgroud)

要么

['a', 'b'] == ['a', 'b'] 
Run Code Online (Sandbox Code Playgroud)

两者都有效,因为这些字母总是按顺序排列.

提前致谢.

javascript arrays lodash

98
推荐指数
4
解决办法
13万
查看次数

使用lodash .groupBy.如何为分组输出添加自己的密钥?

我有一个从API返回的示例数据.

我正在使用Lodash _.groupBy将数据转换为我可以更好地使用的对象.返回的原始数据是:

[
    {
        "name": "jim",
        "color": "blue",
        "age": "22"
    },
    {
        "name": "Sam",
        "color": "blue",
        "age": "33"
    },
    {
        "name": "eddie",
        "color": "green",
        "age": "77"
    }
]
Run Code Online (Sandbox Code Playgroud)

我希望_.groupBy函数返回一个如下所示的对象:

[
    {
        color: "blue",
        users: [
            {
                "name": "jim",
                "color": "blue",
                "age": "22"
            },
            {
                "name": "Sam",
                "color": "blue",
                "age": "33"
            }
        ]
    },
    {
        color: "green",
        users: [
            {
                "name": "eddie",
                "color": "green",
                "age": "77"
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

目前我正在使用

_.groupBy(a, function(b) { return b.color})
Run Code Online (Sandbox Code Playgroud)

这是归还这个. …

javascript sorting grouping underscore.js lodash

85
推荐指数
7
解决办法
13万
查看次数

Lodash标题案例(每个单词的大写第一个字母)

我正在查看lodash文档和其他Stack Overflow问题 - 虽然有几种本地JavaScript方法可以完成此任务,但是有一种方法可以使用纯粹的 lodash函数(或至少现有的原型函数)将字符串转换为标题案例这样我就不必使用正则表达式或定义新函数了?

例如

This string ShouLD be ALL in title CASe
Run Code Online (Sandbox Code Playgroud)

应该成为

This String Should Be All In Title Case
Run Code Online (Sandbox Code Playgroud)

javascript lodash

80
推荐指数
7
解决办法
6万
查看次数

使用Underscore.js以块的形式拆分JavaScript数组

我需要将JavaScript数组拆分为n大小的块.

例如:给定这个数组

["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]
Run Code Online (Sandbox Code Playgroud)

和a n等于4,输出应为:

[ ["a1", "a2", "a3", "a4"],
  ["a5", "a6", "a7", "a8"],
  ["a9", "a10", "a11", "a12"],
  ["a13"]
]
Run Code Online (Sandbox Code Playgroud)

我知道这个问题的纯JavaScript 解决方案,但由于我已经在使用Underscore.js,我想知道下划线是否为此提供了更好的解决方案.

编辑:

我创建了一个jsPerf测试来检查下划线解决方案的速度有多慢.

javascript split functional-programming underscore.js lodash

78
推荐指数
4
解决办法
5万
查看次数

为什么lodash.each比原生forEach更快?

我试图找到运行具有自己范围的for循环的最快方法.我比较的三种方法是:

var a = "t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t".split();

// lodash .each -> 1,294,971 ops/sec
lodash.each(a, function(item) { cb(item); });

// native .forEach -> 398,167 ops/sec
a.forEach(function(item) { cb(item); });

// native for -> 1,140,382 ops/sec
var lambda = function(item) { cb(item); };
for (var ix = 0, len = a.length; ix < len; ix++) {
  lambda(a[ix]);
}
Run Code Online (Sandbox Code Playgroud)

这是在OS X上的Chrome 29上.您可以在此处自行运行测试:

http://jsben.ch/BQhED

Lodash的.each速度几乎是原生的两倍.forEach?而且,它比平原更快for?巫术?黑魔法?

javascript performance lodash

66
推荐指数
4
解决办法
8万
查看次数

使用Lodash按值排序对象数组

我试图通过'name'值对数组进行排序(使用Lodash).我使用Lodash文档创建了下面的解决方案.然而,orderBy似乎没有任何影响.任何人都可以对排序数组的正确方法有所了解吗?

Chars Array

[  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]
Run Code Online (Sandbox Code Playgroud)

功能代码

 var chars = this.state.characters;

 chars = _.orderBy(chars, 'name', 'asc'); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})
Run Code Online (Sandbox Code Playgroud)

arrays lodash

66
推荐指数
3
解决办法
11万
查看次数

Lodash:当我嵌套Object时如何使用过滤器?

考虑这个例子.我正在使用Lodash

 'data': [
        {
            'category': {
                'uri': '/categories/0b092e7c-4d2c-4eba-8c4e-80937c9e483d',
                'parent': 'Food',
                'name': 'Costco'
            },
            'amount': '15.0',
            'debit': true
        },
        {
            'category': {
                'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
                'parent': 'Food',
                'name': 'India Bazaar'
            },
            'amount': '10.0',
            'debit': true
        },
        {
            'category': {
                'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
                'parent': 'Food',
                'name': 'Sprouts'
            },
            'amount': '11.1',
            'debit': true
        },
Run Code Online (Sandbox Code Playgroud)

当我做

_.filter(summary.data, {'debit': true})
Run Code Online (Sandbox Code Playgroud)

我把所有的物品都拿回来了.

我想要的是?

我希望所有的物体在哪里category.parent == 'Food',我该怎么做?

我试过了

_.filter(summary.data, {'category.parent': 'Food'})
Run Code Online (Sandbox Code Playgroud)

得到了

[]
Run Code Online (Sandbox Code Playgroud)

javascript lodash

65
推荐指数
3
解决办法
7万
查看次数

如何让lodash与Angular JS一起使用?

我正在尝试使用lodash在ng-repeat指令中使用它,这样:

<div ng-controller="GridController" ng-repeat="n in _.range(5)">
    <div>Hello {{n}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

存在GridController:

IndexModule.controller('GridController', function () {

this._ = _

})
Run Code Online (Sandbox Code Playgroud)

但是没有工作,所以没有重复.如果我改变指令ng-repeat="i in [1,2,3,4,5]"它将工作.

lodash已经包含<script><header>之前angular.我怎样才能使它工作?

javascript angularjs lodash

65
推荐指数
3
解决办法
7万
查看次数