lodash可以原生地将一个键列表从一个对象拉入一个新对象吗?

时间:2017-01-20 16:59:13

标签: javascript lodash

使用内置的lodash函数,是否可以传入一个对象和一个键列表,并从对象中删除键/值对并放入一个返回的新对象中。一个例子:

var obj = {a: 1, b: 2, c: 3};
pluck(obj, ['a', 'b']) // returns {a: 1, b: 2}
console.log(obj) // {c: 3}

其中pluck被一个或多个lodash函数替换。

2 个答案:

答案 0 :(得分:1)

是的,使用omitpick

obj = _.pick(obj, ['a', 'b']); // { a: 1, b: 2 }

对于新对象:

var newobj = _.omit(obj, ['a', 'b']); // { c: 3 }

答案 1 :(得分:0)

我不认为lodash有任何内置的东西。不过,只需使用JavaScript原生功能,您就可以轻松完成:

var obj = {a: 1, b: 2, c: 3};
console.log(['a', 'b'].reduce(function(newObj, name) {
  newObj[name] = obj[name];
  delete obj[name];
  return newObj;
}, {}));         // {a: 1, b: 2}
console.log(obj) // {c: 3}

对于更多的东西,你可以组合_.pick_.omit,但你要创建一个新对象而不是从现有对象中删除属性(无论如何可能更好):

var obj = {a: 1, b: 2, c: 3};
console.log(_.pick(obj, ['a', 'b'])); // {a: 1, b: 2}
obj = _.omit(obj, ['a', 'b']);
console.log(obj) // {c: 3}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

99.99999%的时间无关紧要,但就像一个FYI,当你在一个对象上使用delete时,在一些JavaScript引擎上将对象置于一个未经优化的“字典”模式,其中后续属性查找比在优化对象中慢得多。 (向对象添加属性不会这样做,只是删除它们。)同样,通常没关系,但是...