js对象过滤属性的方法

2,644 阅读1分钟

记录几种JS中过滤对象的指定字段的方法

示例代码

    const user = {
      name: '小明',
      age: 18,
      address: '广东省广州市黄埔区',
      tel:'158****0000'
    }
    // 需要保留的字段
    const useKeys = ['name', 'age']

方法1:最简单的forin循环

const newUser1 = {}
for (const key in user) {
  if (useKeys.includes(key)) {
    newUser1[key] = user[key]
  }
}
console.log(newUser1);

方法2:最简洁,利于JSON.stringify的第二个参数,过滤出需要的字段,但是要注意他的缺陷,function,undefined等的问题,避免挖坑

const newUser2 = JSON.parse(JSON.stringify(user, useKeys))

方法3:ES10新增的Object.fromEntries和Object.entries共同处理,稍微复杂点

// 先转化成键值数组[['name','小明'],['age': 18]] 第一个是key,第二个是value
const list = Object.entries(user).filter(([key]) => useKeys.includes(key))

// Object.fromEntries将上面的键值数组转化成对象
const newUser3 = Object.fromEntries(list)

前两天刚看到 Object.fromEntries也能转化url参数转为对象 顺便记录下

const search = location.search // 拿到?name=小明&age=18
const UrlSp = new URLSearchParams(search) // 转成URLSearchParams对象
const urlParams = Object.fromEntries(UrlSp)