基于原始对象创建新对象的最简单方法,但没有几个字段
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 }
但我不喜欢那样,有人可以建议更简单的方法吗?例如在猫鼬中,find
方法接受一串字段,用逗号分隔,要排除任何字段,我只需要添加 minus
符号:name email -password
.
您可以尝试这样的操作:
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;
}
如果你用的是underscorejs就很简单了,直接用._omit()
var obj1 = {
a: 1,
b: 2,
c: 3
};
var obj2 = _.omit(obj1, ["c"]);
jsfiddle: https://jsfiddle.net/bpursley/hnh5ecam/
我需要基于原始对象创建一个新对象,其中包含所有字段,但不包含某些字段。在我当前的实现中,我枚举了所有字段,并排除了不需要的字段:
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 }
但我不喜欢那样,有人可以建议更简单的方法吗?例如在猫鼬中,find
方法接受一串字段,用逗号分隔,要排除任何字段,我只需要添加 minus
符号:name email -password
.
您可以尝试这样的操作:
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;
}
如果你用的是underscorejs就很简单了,直接用._omit()
var obj1 = {
a: 1,
b: 2,
c: 3
};
var obj2 = _.omit(obj1, ["c"]);
jsfiddle: https://jsfiddle.net/bpursley/hnh5ecam/