我有两个对象数组,表示具有标签和值的电子邮件地址:
var original = [
{
label: 'private',
value: 'private@johndoe.com'
},
{
label: 'work',
value: 'work@johndoe.com'
}
];
var update = [
{
label: 'private',
value: 'me@johndoe.com'
},
{
label: 'school',
value: 'schhol@johndoe.com'
}
];
Run Code Online (Sandbox Code Playgroud)
现在我想按label字段比较和合并两个数组,以便结果如下所示:
var result = [
{
label: 'private',
value: 'me@johndoe.com'
},
{
label: 'work',
value: 'work@johndoe.com'
},
{
label: 'school',
value: 'schol@johndoe.com'
}
]
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做,例如使用lodash?
我尝试使用嵌套对象克隆一个对象数组.
就像是:
var data = [
{ id: 1, values: { a: 'a', b: 'b' } },
{ id: 2, values: { c: 'c', d: 'd' } }
];
Run Code Online (Sandbox Code Playgroud)
使用_.clone方法和isDeep参数true:
var clone = _.clone(data, true);
data[1].values.d = 'x';
console.log( _.isEqual(data, clone) ); // true, clone[1].values.d == 'x'
Run Code Online (Sandbox Code Playgroud)
我期望clone[1].values.d == 'd':
如果isDeep为true,则也将克隆嵌套对象,否则将通过引用分配它们.
怎么了?
另外,当我尝试使用该_.cloneDeep方法时,我收到一个错误:
var clone = _.cloneDeep(data);
// Uncaught TypeError: Object function u(n){return n instanceof u?n:new o(n)}
// …Run Code Online (Sandbox Code Playgroud) pluck()在lodash版本4中发生了什么?什么是合适的替代品?
这种语法_.pluck(users, 'firstName');对我来说很简单.似乎_.map(users, function(user) { return user.firstName; }可以做到这一点,但它不是那么整洁.
这是我的对象
var data = {
a:{"0": "1"},
b:{"1": "2"},
c:{"2": "3"},
d:{"3": "4"}
};
Run Code Online (Sandbox Code Playgroud)
这是我期望的输出
data = [
{"0": "1"},
{"1": "2"},
{"2": "3"},
{"3": "4"}
]
Run Code Online (Sandbox Code Playgroud) 我有一个数组数组:
var selected = [[1, 4, 5, 6], [1, 2, 3, 5, 7], [1, 4, 5, 6], [1, 7]];
Run Code Online (Sandbox Code Playgroud)
Underscore.js具有方便的并集和交集方法,但它们可以将每个数组作为参数单独传递.
如果要执行设置操作的数组的数量是任意的,我该如何处理呢?
例:
var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}]
var newArr = _.enhance(arr, { married : false });
console.log(newArr); // [{name: 'a', age: 23, married : false}, {name: 'b', age: 24, married : false}]
Run Code Online (Sandbox Code Playgroud)
我正在寻找能做到这一点的事情.注意,lodash中不存在增强功能.用lodash可以做到这一点吗?
如果不是 - 可能添加?
谢谢,
我无法打破_.forEach循环,帮助我做到这一点.
_.forEach(oIncludedFileMap, function (aIncludedFiles, sKey) {
if(aIncludedFiles == null){
break;
}
});
Run Code Online (Sandbox Code Playgroud) 浏览一下Lo-Dash文档,可以看出API属于以下类别:
更详细地了解Arrays API,可以看到大约30种适用于数组的不同方法.
Collections API有比Arrays API更多的方法,它们不共享相同的方法.
在Collections API中,集合被描述为迭代的对象,可以是一个数组:
collection(Array | Object | string):要迭代的集合.
另外,有趣的是,有一个Collections API方法_.toArray从集合中返回一个数组:
参数
collection(Array | Object | string):要转换的集合.返回
(Array):返回新转换的数组.
有人会碰巧知道Lo-Dash API中数组和集合之间的形式差异吗?由于Backbone.js的原因,我认为这是一个区别,但是,现在我正在质疑我的推理,因为这些方法可能在其他地方可用.提前致谢.
我有以下集合:
var columns = [
{ key:'url', width:20, type:'text' },
{ key:'title', width:21, type:'text' },
{ key:'desc', width:22, type:'text' },
{ key:'domain', width:23, type:'text' },
{ key:'user', width:24, type:'text' }
];
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来映射一个带有拾取键的对象数组,类似于:
_.mapPick(columns, [width])
// [{width:20},{width:21},{width:22},{width:23},{width:24}]
Run Code Online (Sandbox Code Playgroud)
我知道我可以像这样扩展lo-dash:
_.mixin({
mapPick: mapPick:function (objs,keys){
return _.map(objs, function (obj) {
return _.pick(obj,keys)
})
}
});
Run Code Online (Sandbox Code Playgroud)
我不确定是否有一些我缺少的本机功能.
我有这个javascript对象:
var arr1 = [{id:'124',name:'qqq'},
{id:'589',name:'www'},
{id:'45',name:'eee'},
{id:'567',name:'rrr'}]
var arr2 = [{id:'124',name:'ttt'},
{id:'45',name:'yyy'}]
Run Code Online (Sandbox Code Playgroud)
我需要用arr2中具有相同id的项替换arr1中的对象.
所以这是我想得到的结果:
var arr1 = [{id:'124',name:'ttt'},
{id:'589',name:'www'},
{id:'45',name:'yyy'},
{id:'567',name:'rrr'}]
Run Code Online (Sandbox Code Playgroud)
如何使用javascript实现它?