是否有内置的lodash函数来实现:
var params = [
{ name: 'foo', input: 'bar' },
{ name: 'baz', input: 'zle' }
];
Run Code Online (Sandbox Code Playgroud)
输出这个:
var output = {
foo: 'bar',
baz: 'zle'
};
Run Code Online (Sandbox Code Playgroud)
现在我只是使用Array.prototype.reduce():
function toHash(array, keyName, valueName) {
return array.reduce(function(dictionary, next) {
dictionary[next[keyName]] = next[valueName];
return dictionary;
}, {});
}
toHash(params, 'name', 'input');
Run Code Online (Sandbox Code Playgroud)
想知道是否有一个lodash捷径.
我检查了这个答案但是为了获得相同的结果,即获得不区分大小写的排序,我需要使用orderBy而不是sortBy因为它能够指定排序顺序.
我发现实现它的唯一方法是创建一个映射到小写的克隆"中间"数组name:
const users = [
{ name: 'A', age: 48 },
{ name: 'B', age: 34 },
{ name: 'b', age: 40 },
{ name: 'a', age: 36 }
];
let lowerCaseUsers = _.clone(users);
lowerCaseUsers = lowerCaseUsers.map((user) => {
user.name = user.name.toLowerCase();
return user;
});
const sortedUsers = _.orderBy(lowerCaseUsers, ['name'], ['desc']);
console.log(sortedUsers);
Run Code Online (Sandbox Code Playgroud)
这看起来非常昂贵,而且对于多个排序和动态属性名称来说甚至会更复杂.
有更好的主意吗?
这是一个Plunker:https://plnkr.co/edit/i1ywyxjFctuNfHtPTcgG
我运行npm install lodash但它抛出错误:EACCES:权限被拒绝错误.我知道这是权限问题,但据我所知,本地安装节点模块不需要sudo权限.如果我用sudo运行它,它将被安装在〜/ node_modules文件夹中.drwxrwxr-x是现有文件夹的文件权限.我无法弄清楚可能出了什么问题.
以下是错误消息.
npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR! at Error (native)
npm ERR! { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR! errno: -13,
npm ERR! …Run Code Online (Sandbox Code Playgroud) 我想使用属性值数组过滤集合.给定一组ID,返回具有匹配ID的对象.是否有使用lodash/的快捷方法underscore?
var collections = [{ id: 1, name: 'xyz' },
{ id: 2, name: 'ds' },
{ id: 3, name: 'rtrt' },
{ id: 4, name: 'nhf' },
{ id: 5, name: 'qwe' }];
var ids = [1,3,4];
// This works, but any better way?
var filtered = _.select(collections, function(c){
return ids.indexOf(c.id) != -1
});
Run Code Online (Sandbox Code Playgroud) 我有以下内容监视<input>绑定到$ scope.id 的字段.每次输入字段值改变时,执行watch函数:
$scope.$watch("id", function (id) {
// code that does something based on $scope.id
});
Run Code Online (Sandbox Code Playgroud)
有没有办法可以对此进行超时或者使用_lodash进行去抖动,这样在用户更改值时代码不会在每个按键上执行.
我想要的是延迟一秒钟,以便在用户停止输入一秒后,手表内的代码块运行.请注意,输入值可能随时发生变化.例如,如果值为"1"或"10"或"1000",我需要调用该函数.这与带有建议的搜索框在Google中的工作方式类似.如果用户键入999,那么我需要调用该函数.如果他删除了9,那么它就是99,那么我需要调用该函数.
我确实有_lodash可用,因此使用它的解决方案可能最适合我的需求.
您好我无法弄清楚为什么当直接传递给keyup事件时debounce函数按预期工作; 但如果我将它包装在匿名函数中,它就不起作用.
我有问题:http : //jsfiddle.net/6hg95/1/
编辑:添加了我尝试过的所有东西.
HTML
<input id='anonFunction'/>
<input id='noReturnAnonFunction'/>
<input id='exeDebouncedFunc'/>
<input id='function'/>
<div id='output'></div>
Run Code Online (Sandbox Code Playgroud)
JAVASCRIPT
$(document).ready(function(){
$('#anonFunction').on('keyup', function () {
return _.debounce(debounceIt, 500, false); //Why does this differ from #function
});
$('#noReturnAnonFunction').on('keyup', function () {
_.debounce(debounceIt, 500, false); //Not being executed
});
$('#exeDebouncedFunc').on('keyup', function () {
_.debounce(debounceIt, 500, false)(); //Executing the debounced function results in wrong behaviour
});
$('#function').on('keyup', _.debounce(debounceIt, 500, false)); //This is working.
});
function debounceIt(){
$('#output').append('debounced');
}
Run Code Online (Sandbox Code Playgroud)
anonFunction并且noReturnAnonFunction不会启动去抖功能; 但是最后一次function …
我在我的应用程序中使用React/JSX以实现我想要的,Lodash.
我需要根据条件重复一个元素一定次数,我该怎么做?
这是元素:
<span className="busterCards">?</span>;
我这样分配它:
let card;
if (data.hand === '8 or more cards') {
card = <span className="busterCards">?</span>;
}
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,我需要重复8次元素.使用Lodash的过程应该是什么?
我们有一个对象数组
var myArr = [ {name: "john", age:23}
{name: "john", age:43}
{name: "jim", age:101}
{name: "bob", age:67} ];
Run Code Online (Sandbox Code Playgroud)
如何从myArr获取对象列表,其名称是john与lodash?
我正在尝试创建一个数组,如果一个值不存在则添加但是如果值在那里我也想从数组中删除该值.
像Lodash这样的感觉应该可以做这样的事情.
我对您的最佳实践建议感兴趣.
值得指出的是我使用的是Angular.js
*更新*
if (!_.includes(scope.index, val)) {
scope.index.push(val);
} else {
_.remove(scope.index, val);
}
Run Code Online (Sandbox Code Playgroud) 除了声明"转换是一种更有效的替代方法"之外,我找不到有关差异的文档.lodash中的transform和reduce之间有什么区别(除了慢25%)?