在原始对象的基础上创建新对象的最简单方法,但没有几个字段
Simplest way to create a new object based on the original, but without a few fields
我需要在原始对象的基础上创建一个新对象,其中包含所有字段,但没有部分字段。在我当前的实现中,我列举了所有字段,并排除了不需要的:
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
相关文章:
- 从 javascript 中的对象方法返回一个对象
- 在Javascript中调用对象方法时不是函数类型错误
- Java Script将对象方法映射到数组中的对象
- 将数据从promise then方法传递到对象方法
- 设置显示后Flash对象方法不可用:无
- 通过引用Javascript中的另一个函数来传递对象方法
- Javascript库对象方法声明
- JavaScript对象范围-在对象方法中使用对象变量
- jQuery:如何使用文字对象方法中的方法来获取全局变量
- Javascript 对象方法不更新变量
- setInterval 只在对象方法上运行一次
- 对象方法中函数中的上下文
- 用JavaScript编写对象方法的最佳方式是什么
- 使用回调处理程序调用函数内部的父对象方法
- 从Javascript中的对象方法中访问全局变量
- 将此(对象)传递到一个对象方法嵌套方法中
- 为什么我得到“;不是函数错误”;对于我的对象方法
- 带有回调的Javascript对象方法中的递归
- 更正Node.js异步管道中的对象方法调用
- 如何在对象方法上调用requestAnimFrame