我有一个对象和数组,如下所示,我想删除对象的所有属性,除了数组中列出的属性。有人可以帮我做一个很好的lodash功能来做到这一点。
object : {A:1,B:2,C:3,D:4}
array: [{type:B,value:xyz,order:1},{type:D,value:abc,order:0}]
I want the object to be {B:2,D:4} after the operation
答案 0 :(得分:3)
像这样使用_.pick
:
var result = _.pick(object, array);
var object = {
A: 1,
B: 2,
C: 3,
D: 4
};
var array = ["B", "D"];
var result = _.pick(object, array);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
修改强>
您应首先使用_.map
获取密钥,然后使用_.pick
,如下所示:
var result = _.pick(object, _.map(array, function(e) {
return e.type;
}));
或使用箭头功能,如下所示:
var result = _.pick(object, _.map(array, e => e.type));
使用iteratee
这样的参数甚至更短:
var result = _.pick(object, _.map(array, "type"));
var object = {
A: 1,
B: 2,
C: 3,
D: 4
};
var array = [{type: "B", value: "xyz", order: 1}, {type: "D", value: "abc", order: 0}];
var result = _.pick(object, _.map(array, "type"));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
答案 1 :(得分:2)
您可以使用hmDelete
,Object.assign()
,展开元素,计算属性,将过滤Array.prototype.map()
属性的结果分配给type
object
答案 2 :(得分:0)