我怎样才能改变一个大object到array与lodash?
例:
var obj = {
22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],}
12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],}
}
// transform to
var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我确定它在LoDash文档中的某个地方,但我似乎找不到合适的组合.
var users = [{
id: 12,
name: Adam
},{
id: 14,
name: Bob
},{
id: 16,
name: Charlie
},{
id: 18,
name: David
}
]
// how do I get [12, 14, 16, 18]
var userIds = _.map(users, _.pick('id'));
Run Code Online (Sandbox Code Playgroud) 有一种漂亮的方法可以根据几个属性对对象数组进行排序:
var data = _.sortBy(array_of_objects, ['type', 'name']);Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于升序排序.是否有一些方便的方法来定义每列的方向?例如
var data = _.sortBy(array_of_objects, [{'type': 'asc'}, {'name': 'desc'}]);Run Code Online (Sandbox Code Playgroud) 我的对象:
[
{
description: 'object1', id: 1
},
{
description: 'object2', id: 2
}
{
description: 'object3', id: 3
}
{
description: 'object4', id: 4
}
]
Run Code Online (Sandbox Code Playgroud)
在我的函数中,我正在传递描述以找到匹配的ID:
function pluckSavedView(action, view) {
console.log('action: ', action);
console.log('pluckSavedView: ', view); // view = 'object1'
var savedViews = retrieveSavedViews();
console.log('savedViews: ', savedViews);
if (action === 'delete') {
var delete_id = _.result(_.find(savedViews, function(description) {
return description === view;
}), 'id');
console.log('delete_id: ', delete_id); // should be '1', but is undefined
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用lodash的find方法:https …
lodash让我检查基本数据类型的成员资格includes:
_.includes([1, 2, 3], 2)
> true
Run Code Online (Sandbox Code Playgroud)
但以下不起作用:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为以下搜索集合的方法似乎做得很好:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何检查集合中对象的成员资格includes?
编辑:问题最初是针对lodash版本2.4.1,更新为lodash 4.0.0
mapunderscore.js中的函数,如果使用javascript对象调用,则返回从对象的值映射的值数组.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
Run Code Online (Sandbox Code Playgroud)
有没有办法让它保存钥匙?即,我想要一个返回的函数
{one: 3, two: 6, three: 9}
Run Code Online (Sandbox Code Playgroud) 我一直在寻找一种方式来传递查询paramters与新API调用HttpClientModule的HttpClient,还没有找到一个解决方案.使用旧Http模块,您可以编写类似这样的内容.
getNamespaceLogs(logNamespace) {
// Setup log namespace query parameter
let params = new URLSearchParams();
params.set('logNamespace', logNamespace);
this._Http.get(`${API_URL}/api/v1/data/logs`, { search: params })
}
Run Code Online (Sandbox Code Playgroud)
这将导致对以下URL的API调用:
localhost:3001/api/v1/data/logs?logNamespace=somelogsnamespace
但是,新HttpClient get()方法没有search属性,所以我想知道在哪里传递查询参数?
是否可以遍历JavaScript对象中的属性?例如,我有一个JavaScript对象定义如下:
myObject.options = {
property1: 'value 1',
property2: 'value 2'
};
Run Code Online (Sandbox Code Playgroud)
属性将动态添加到此对象.有没有办法让我循环检查一个属性是否存在?如果是这样,怎么样?
我想知道在lodash中是否有一个更简单的方法来替换JavaScript集合中的项目?(可能重复,但我不明白那里的答案:)
我看了他们的文档但找不到任何东西
我的代码是:
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
// Can following code be reduced to something like _.XX(arr, {id:1}, {id:1, name: "New Name"});
_.each(arr, function(a, idx){
if(a.id === 1){
arr[idx] = {id:1, name: "Person New Name"};
return false;
}
});
_.each(arr, function(a){
document.write(a.name);
});
Run Code Online (Sandbox Code Playgroud)
更新: 我正在尝试替换的对象有许多属性,如
{id:1,Prop1:...,Prop2:...,依此类推}
解:
感谢dfsq,但我在lodash中找到了一个合适的解决方案,似乎工作正常并且非常整洁,我把它放在mixin中,因为我在很多地方都有这个要求.JSBin
var update = function(arr, key, newval) {
var match = _.find(arr, key);
if(match)
_.merge(match, newval);
else
arr.push(newval);
};
_.mixin({ '$update': …Run Code Online (Sandbox Code Playgroud) 使用webpack,我试图导入isEqual,因为lodash似乎导入了所有内容.我尝试过以下操作但没有成功:
import { isEqual } from 'lodash'
import isEqual from 'lodash/lang'
import isEqual from 'lodash/lang/isEqual'
import { isEqual } from 'lodash/lang'
import { isEqual } from 'lodash/lang'
Run Code Online (Sandbox Code Playgroud)