ES6 Object.values 特定字段处理

上篇文章,介绍了ES6 Object处理对象的常用的处理方法,小伙伴可以参考:ES6 Object.keys()、Object.values()、 和 Object.entries() 区别-CSDN博客

在JavaScript中,Object.values() 方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与通过循环(例如,使用 for...in)遍历它们时的一致。如果想要从对象中提取特定字段的值,而不是所有值,你可以使用几种不同的方法来实现这一点。

基础示例:

复制代码
const obj = {
 a: 1,
 b: 2,
 c: 3,
 d: 4
};

const values = Object.values(obj);
console.log(values); // 输出: [1, 2, 3, 4]

进阶

1、使用 Object.values() 结合数组的 map 方法

如果你想要获取特定字段的值,可以先使用 Object.values() 获取所有值,然后通过 map 方法过滤出你需要的字段值。

复制代码
const obj = {
  name: "Aotman_",
  age: 25,
  city: "Hang Zhou"
};
 
// 假设我们只对 'name' 和 'city' 字段感兴趣
const specificValues = Object.values(obj).map(value => ({ value }));
console.log(specificValues); // 输出: [{ value: 'Aotman_' }, { value: 'Hang Zhou' }]
 
// 如果你想要一个简单的数组
const simpleArray = specificValues.map(item => item.value);
console.log(simpleArray); // 输出: ['Aotman_', 'Hang Zhou']

2、 使用 Object.entries() 和数组的 filter 方法

使用 Object.entries() 来获取键值对数组,然后使用 filter 方法来筛选出你需要的字段。

复制代码
const obj = {
  name: "Aotman_",
  age: 25,
  city: "Hang Zhou"
};
 
// 获取特定字段的值
const filteredValues = Object.entries(obj)
  .filter(([key]) => ['name', 'city'].includes(key)) // 只保留 'name' 和 'city' 的键值对
  .map(([key, value]) => value); // 只取值
 
console.log(filteredValues); // 输出: ['Aotman_', 'Hang Zhou']

3、直接访问对象属性(适用于已知字段)

如果知道要提取哪些字段,可以直接通过属性访问来获取这些字段的值。

复制代码
const obj = {
  name: "Aotman_",
  age: 25,
  city: "Hang Zhou"
};
 
const { name, city } = obj; // ES6 解构赋值
console.log(name, city); // 输出: Alice Hang Zhou

或者作为一个数组:

复制代码
const specificValues = [obj.name, obj.city];
console.log(specificValues); // 输出: ['Aotman_', 'Hang Zhou']

4、使用 reduce 方法

可以使用 reduce 方法来收集特定字段的值。

复制代码
const obj = {
  name: "Aotman_",
  age: 25,
  city: "Hang Zhou"
};
 
const specificValues = Object.keys(obj) // 获取所有键名
  .filter(key => ['name', 'city'].includes(key)) // 筛选出特定键名
  .reduce((acc, key) => {
    acc.push(obj[key]); // 根据键名获取值并加入结果数组
    return acc;
  }, []); // 初始化空数组作为累加器
 
console.log(specificValues); // 输出: ['Aotman_', 'Hang Zhou']

总结

以上方法可以根据具体需求选择使用。如果只需要几个特定的字段,直接通过属性访问或者使用 reduce 方法可能是最直接和高效的方式。如果需要更灵活的处理(例如,基于某些条件选择字段),那么使用 filter 或结合 map 的方法可能更合适。

相关推荐
GIS之路4 分钟前
使用命令行工具 ogr2ogr 将 CSV 转换为 Shp 数据(二)
前端
嘉琪00116 分钟前
Vue3+JS 高级前端面试题
开发语言·前端·javascript
vipbic1 小时前
用 Turborepo 打造 Strapi 插件开发的极速全栈体验
前端·javascript
天涯学馆1 小时前
为什么 JavaScript 可以单线程却能处理异步?
前端·javascript
Henry_Lau6171 小时前
主流IDE常用快捷键对照
前端·css·ide
陶甜也1 小时前
使用Blender进行现代建筑3D建模:前端开发者的跨界探索
前端·3d·blender
我命由我123452 小时前
VSCode - Prettier 配置格式化的单行长度
开发语言·前端·ide·vscode·前端框架·编辑器·学习方法
HashTang2 小时前
【AI 编程实战】第 4 篇:一次完美 vs 五轮对话 - UnoCSS 配置的正确姿势
前端·uni-app·ai编程
JIngJaneIL2 小时前
基于java + vue校园快递物流管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js