js实现根据键名过滤对象

JavaScript的对象不像数组或字符串那样可以迭代,所以我们不能直接在对象上使用filter()方法。

常用的对象处理方法:

  • 使用Object.keys()来提取键
  • 使用Object.values()来提取值
  • 使用Object. entries()检索键和值

在这篇文章中,我们将探讨如何使用Object.keys()来过滤一个对象。

  1. Object.key()方法用于生成一个数组,其元素是包含对象属性的名称(key)的字符串。
  2. 在生成了键名数组之后,可以使用filter()遍历现有的数组,只返回那些符合指定条件的键名。
  3. 最后,使用reduce()将过滤后的键和它们的值收集到一个新的对象中。

假设我们有一个对象并且我们想只返回键值中带有name的键值对:

const user = {
    firstName: "John",
    lastName: "Doe",
    userName: "johndoe12",
    email: "[email protected]tackabuse.com",
    age: 37,
    hobby: "Singing"
};
  1. 使用Object.key(user)来生成所有的键,作为一个数组,结果是一个数组:
Object.keys(user)
// ["firstName","lastName","userName","email","age","hobby"]
  1. 使用filter()方法,筛出包含Name的键名
Object.keys(user).filter((key) => key.includes("Name"))
// ["firstName","lastName","userName"]
  1. 使用reduce()将符合条件的键值对合并为一个对象
const names = Object.keys(user).filter((key) => key.includes("Name"))
    .reduce((obj, key) => { return Object.assign(obj, {[key]: user[key]}) }, {})

console.log(names)
// { firstName: 'John', lastName: 'Doe', userName: 'johndoe12' }

通过键过滤Users对象,只返回selectedUsers的对象

const users = {
    John: { username: 'johncam112', age:19 },
    Daniel: { key: 'Dandandel1', age:21 },
    Ruth: { key: 'rutie01', age:24 },
    Joe: { key: 'Joemathuel', age:28 }
};

const selectedUsers = ['Ruth', 'Daniel'];

const filteredUsers = Object.keys(users)
    .filter(key => selectedUsers.includes(key))
    .reduce((obj, key) => {
        obj[key] = users[key];
        return obj;
  }, {});

console.log(filteredUsers);
/**
{
    Daniel: {
        key:"Dandandel1",
        age:21
},
    Ruth: {
        key:"rutie01",
        age:24
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值