Javascript 如何筛选对象成员
假设我们有Javascript 如何筛选对象成员,javascript,Javascript,假设我们有 const obj = { a: 1, b: 2, c: 3, d: 4 }; 我们想删除一些成员。例如c和d: { a: 1, b: 2 }; 有比这更干净的不变的方法吗 const keysToRemove = ['c', 'd']; Object.keys(obj) .filter(key => !keysToRemove.includes(key)) .reduce((acc, key) => { acc[key] = obj[key]
const obj = { a: 1, b: 2, c: 3, d: 4 };
我们想删除一些成员。例如c
和d
:
{ a: 1, b: 2 };
有比这更干净的不变的方法吗
const keysToRemove = ['c', 'd'];
Object.keys(obj)
.filter(key => !keysToRemove.includes(key))
.reduce((acc, key) => {
acc[key] = obj[key];
return acc;
} , {});
从原始对象的条目中,您可以对其进行过滤以构建一个新的条目数组,而无需使用
keystemove
中的键。然后使用对象创建一个新对象。fromEntries
:
constobj={a:1,b:2,c:3,d:4};
常量keystremove=['c','d'];
const newObj=Object.fromEntries(
Object.entries(obj)
.filter(([key])=>!keystemove.includes(key))
);
console.log(newObj)代码>从原始对象的条目中,您可以对其进行过滤以构建一个新的条目数组,而无需使用keystemove
中的键。然后使用对象创建一个新对象。fromEntries
:
constobj={a:1,b:2,c:3,d:4};
常量keystremove=['c','d'];
const newObj=Object.fromEntries(
Object.entries(obj)
.filter(([key])=>!keystemove.includes(key))
);
console.log(newObj)代码>如果要删除的密钥较少,则可以使用扩展运算符来分解分配。也可以使用delete运算符
constobj={a:1,b:2,c:3,d:4};
常数{c,d,…filteredObj}=obj;
console.log(filteredObj);//{“a”:1,“b”:2}
const obj={
答:1,,
b:2,
c:3,
d:4
};
常数{
C
D
…过滤器
}=obj;
控制台日志(filteredObj)代码>如果要删除的密钥较少,则可以使用扩展运算符来分解分配。也可以使用delete运算符
constobj={a:1,b:2,c:3,d:4};
常数{c,d,…filteredObj}=obj;
console.log(filteredObj);//{“a”:1,“b”:2}
const obj={
答:1,,
b:2,
c:3,
d:4
};
常数{
C
D
…过滤器
}=obj;
控制台日志(filteredObj)代码>在这种情况下,我总是更喜欢经典的for…In
循环。它更简单、更清晰、可读性更强
const obj = { a: 1, b: 2, c: 3, d: 4 };
const keysToRemove = ['c', 'd'];
let newObj = {};
for (let key in obj) {
if(!keysToRemove.includes(key)) {
newObj[key] = obj[key];
}
}
console.log(newObj); //outputs {a: 1, b: 2}
在这种情况下,我总是更喜欢经典的for…In
循环。它更简单、更清晰、可读性更强
const obj = { a: 1, b: 2, c: 3, d: 4 };
const keysToRemove = ['c', 'd'];
let newObj = {};
for (let key in obj) {
if(!keysToRemove.includes(key)) {
newObj[key] = obj[key];
}
}
console.log(newObj); //outputs {a: 1, b: 2}
计算属性名称可用于具有虚拟目标属性。你可以在这里了解更多
计算属性名称可用于具有虚拟目标属性。你可以在这里了解更多
虽然这个链接是类似的,但这里的这个问题不需要使用解构的方法。在这里使用解构看起来相当混乱,这是一个明显的重复,虽然链接类似,但这个问题不需要使用解构的方法。如果要删除的键是静态的,那么在这里使用解构看起来会非常混乱,如果要删除的键是静态的,那么它的清晰副本会非常整洁。但是我是动态地确定密钥的,如果要删除的密钥是静态的,那么这就相当好了。虽然这段代码可能会解决这个问题,但一个好的答案也应该解释这段代码的作用以及它的帮助。@BDL这是一个很好的观点。这个答案比我的答案少了一次迭代,所以它已经是一个改进了。但它仍然相当冗长。Array
接口有filter
、reduce
、splice
和许多其他解决这些问题的方法,但是Object
似乎没有提供这些方法。您必须转换为数组,执行操作并从新数组中创建对象。该代码过滤实际对象条目以构建新的条目数组,不包括ignoreKeys中的键。虽然此代码可能会解决此问题,但一个好的答案也应该解释代码的作用以及它的帮助。@BDL很好。这个答案比我的答案少了一次迭代,所以它已经是一个改进了。但它仍然相当冗长。Array
接口有filter
、reduce
、splice
和许多其他解决这些问题的方法,但是Object
似乎没有提供这些方法。您必须转换为数组,执行操作并从新数组创建对象。代码过滤实际对象条目以构建新的条目数组,不包括ignoreKeys中的键。这比我的代码少了一次迭代。这是一个改进。这比我的代码少了一次迭代。这是一个进步。
var originalObj = { a: 1, b: 2, c: 3, d: 4 };
keysToRemove = ['c', 'd'];
result = keysToRemove.reduce((total, key) => {
const { [key]: dummy, ...remainder } = total;
return remainder;
}, originalObj);
console.log(result);