在原始对象的基础上创建新对象的最简单方法,但没有几个字段

Simplest way to create a new object based on the original, but without a few fields

本文关键字:对象 方法 有几个 字段 最简单 基础上 原始 创建 新对象      更新时间:2024-03-31

我需要在原始对象的基础上创建一个新对象,其中包含所有字段,但没有部分字段。在我当前的实现中,我列举了所有字段,并排除了不需要的:

var obj1 = {
  a: 1,
  b: 2,
  c: 3
};
var keys = _.keys(obj);
_.remove(keys, 'c');
var obj2 = _.pick(obj1, keys);
console.log(obj2); // => { a: 1, b: 2 }

但我不喜欢这样,有人能提出更简单的方法吗?例如,在mongoose中,find方法接受一个由逗号分隔的字段字符串,要排除任何字段,我只需要添加minus符号:name email -password

如果您使用underscorejs,它非常简单,只需使用._omit()

var obj1 = {
  a: 1,
  b: 2,
  c: 3
};
var obj2 = _.omit(obj1, ["c"]);

jsfiddle:https://jsfiddle.net/bpursley/hnh5ecam/

你可以试试这样的东西:

var obj2 = {},
    forbiddenProperties = ['c', 'd'];
Object.keys(obj1).forEach(function (key) {
   if (forbiddenProperties.indexOf(key) >= 0) {
      obj2[key] = obj1[key];
   }
});

您可以创建一个这样做的函数,而不需要依赖下划线。

function partialClone(obj, excluded) {
  var clone = {};
  for (var key in obj) {
    if (!excluded.includes(key)) {
      clone[key] = obj[key];
    }
  }
  return clone;
}

工作jsFiddle