有没有人知道(如果可能的话,还是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) 我有一个对象数组.我想通过某个字段找到,然后改变它:
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)
我知道我可以使用循环来做到这一点,但我试图找到一种优雅的方式来做到这一点:
我有两个数组:
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)
两者都有效,因为这些字母总是按顺序排列.
提前致谢.
我有一个从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)
这是归还这个. …
我正在查看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数组拆分为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
我试图找到运行具有自己范围的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上.您可以在此处自行运行测试:
Lodash的.each速度几乎是原生的两倍.forEach?而且,它比平原更快for?巫术?黑魔法?
我试图通过'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) 考虑这个例子.我正在使用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) 我正在尝试使用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.我怎样才能使它工作?
lodash ×10
javascript ×9
arrays ×4
grouping ×2
angularjs ×1
ecmascript-6 ×1
object ×1
performance ×1
sorting ×1
split ×1