"Removing" 一个对象的多个属性没有突变
"Removing" multiple properties from an object without mutation
我正在寻找一种创建函数的方法。我可以在其中传递一个对象和一组我想要的属性(键)。该函数将为我 return 一个没有我指定的键的新对象。
function(keys: array, obj: object) {...}
问题是 - 我该如何处理多个属性?
我搜索了一下,只找到了这种解决方案:
const myObject = {
a: 1,
b: 2,
c: 3
};
const { a, ...noA } = myObject;
但只有当我只想删除一把钥匙时它才有效。如果我想使用刚刚传递的数组删除多个怎么办?如何在不改变原始数组或手动创建副本的情况下做到这一点?
您可以使用 reduce
和 Object.entries()
来完成。你可以试试这个:
const myObject = {
a: 1,
b: 2,
c: 3,
d: 4
};
const removeProps = (object, keys) => {
return Object.entries(object).reduce((a, [key, value]) => (keys.indexOf(key) === -1 ? {...a, [key]: value}: a), {});
}
console.log(removeProps(myObject, ['b']));
console.log(removeProps(myObject, ['b', 'c']));
console.log('Original Object: ', myObject);
.as-console-wrapper{min-height: 100%!important; top: 0}
您可以通过计算不需要的属性 属性 来解构对象。
const
without = (object, keys) => keys.reduce((o, k) => {
const { [k]: _ , ...p } = o;
return p;
}, object),
myObject = { a: 1, b: 2, c: 3 },
keys = ['a', 'b'],
result = without(myObject, keys);
console.log(result);
上面的答案很好,分享我的尝试:
var myObject = { a: 1, b: 2, c: 3, d: 4};
let remove=(obj, arr)=> {
let output=[];
for(const [key, value] of Object.entries(obj)){
if(!arr.includes(key)){
output.push([key,value]);
}
}
return Object.fromEntries(output);
}
console.log(remove(myObject, ['a']));
console.log(remove(myObject, ['a', 'c']));
我正在寻找一种创建函数的方法。我可以在其中传递一个对象和一组我想要的属性(键)。该函数将为我 return 一个没有我指定的键的新对象。
function(keys: array, obj: object) {...}
问题是 - 我该如何处理多个属性?
我搜索了一下,只找到了这种解决方案:
const myObject = {
a: 1,
b: 2,
c: 3
};
const { a, ...noA } = myObject;
但只有当我只想删除一把钥匙时它才有效。如果我想使用刚刚传递的数组删除多个怎么办?如何在不改变原始数组或手动创建副本的情况下做到这一点?
您可以使用 reduce
和 Object.entries()
来完成。你可以试试这个:
const myObject = {
a: 1,
b: 2,
c: 3,
d: 4
};
const removeProps = (object, keys) => {
return Object.entries(object).reduce((a, [key, value]) => (keys.indexOf(key) === -1 ? {...a, [key]: value}: a), {});
}
console.log(removeProps(myObject, ['b']));
console.log(removeProps(myObject, ['b', 'c']));
console.log('Original Object: ', myObject);
.as-console-wrapper{min-height: 100%!important; top: 0}
您可以通过计算不需要的属性 属性 来解构对象。
const
without = (object, keys) => keys.reduce((o, k) => {
const { [k]: _ , ...p } = o;
return p;
}, object),
myObject = { a: 1, b: 2, c: 3 },
keys = ['a', 'b'],
result = without(myObject, keys);
console.log(result);
上面的答案很好,分享我的尝试:
var myObject = { a: 1, b: 2, c: 3, d: 4};
let remove=(obj, arr)=> {
let output=[];
for(const [key, value] of Object.entries(obj)){
if(!arr.includes(key)){
output.push([key,value]);
}
}
return Object.fromEntries(output);
}
console.log(remove(myObject, ['a']));
console.log(remove(myObject, ['a', 'c']));