将对象与数组进行比较

时间:2017-03-13 21:03:09

标签: javascript lodash

我有一个对象和数组,如下所示,我想删除对象的所有属性,除了数组中列出的属性。有人可以帮我做一个很好的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

3 个答案:

答案 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)

您可以使用hmDeleteObject.assign(),展开元素,计算属性,将过滤Array.prototype.map()属性的结果分配给type

object

答案 2 :(得分:0)

您可以使用_.pick_.map来实现此目的:

let obj = { A:1, B:2, C:3, D:4 };
let arr = [{ type:'B', value:'xyz', order:1 },{ type:'D', value:'abc', order:0 }];

let output = _.pick(obj, _.map(arr, 'type'));

console.log(output); // { B:2, D: 4 }

示例:JsFiddle

Lodash Docs:

_。map()link

_。pick()link