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);