使用下划线减少基于数组的对象项

时间:2018-10-07 13:26:46

标签: javascript node.js underscore.js

具有:

array = []
array.push(111,2122,333,9)

obj.user = {
    '111'  : {},
    '2122' : {},
    '333'  : {},
    '44'   : {}
}

如何获取仅包含数组中存在的元素的新对象?

在上述情况下,它将返回:

{
    '111': {},
    '2122': {},
    '111': {}
}

我已经尝试过了:

var newObj = _.keys(_.pick(obj.user, function(value, key) {
  if ( _.indexOf(array, parseInt(key)) != -1 ) {
    return obj.user[key]
  }
}));

在jsfiddle上进行测试时,这可以很好地工作,但是使用process out of memory会使我的应用程序崩溃。对象/数组不是很大,可能有20-30个项目,但是那段代码被执行了很多次。

1 个答案:

答案 0 :(得分:4)

您可以使用_.pick

const result = _.pick(obj.user, array);

实时示例:

const array = [];
array.push(111,2122,333,9)

const obj = {
  user: {
    '111'  : {},
    '2122' : {},
    '333'  : {},
    '44'   : {}
  }
};

const result = _.pick(obj.user, array);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>