Object.values、map、filter、set、some、reduce、indexOf、trim、join、union、intersection用法

发布于:2025-03-07 ⋅ 阅读:(12) ⋅ 点赞:(0)

案例:

//先用Object.values(cross)来获取cross对象的所有值,然后使用map函数来提取每个对象的landform属性值。
    let landformAll = Object.values(nowGeoInfo.value.cross).map((obj:any) =>crossLandformChinese(obj.landform));
    //用filter函数来移除landformAll数组中的null和空字符串
    let landformAllNotNull = landformAll.filter((value: any) => value != null && value!= '');
    if(landformAllNotNull.length>0){
   
      //先使用Set构造函数来创建一个新的集合,该集合会自动去除重复的元素。然后,使用扩展运算符(...)将集合转换回数组,并赋值给crossLandform
      crossLandform.value = [...new Set(landformAllNotNull )];
    }else {
   
      crossLandform.value = null;
    }

一、Object.values

用法:把JSON转数组;返回对象自身可枚举属性值的数组,适用于快速获取对象值集合的场景。

Object.values(obj)

obj 为目标对象,若传入非对象参数(如原始类型),方法会尝试将其转换为对象(如字符串转为字符数组)
返回值:包含对象自身所有可枚举属性值的数组。若对象无属性,返回空数组 []。

const person = {
    name: 'John', age: 30 };
console.log(Object.values(person)); // ['John', 30]

// 处理字符串时,返回字符数组
console.log(Object.values('abc')); // ['a', 'b', 'c']

属性遍历顺序
数值键属性:按数字升序排列(如 ‘2’ 优先于 ‘10’)。
字符串键属性:按属性定义的先后顺序排列。
Symbol 键属性:按定义的先后顺序排在最后。

const obj = {
    10: 'a', 2: 'b', c: 'd' };
console.log(Object.values(obj)); // ['b', 'a', 'd']

场景
(1)数据提取与转换:提取对象值用于计算(如求和、统计),或转换为其他格式(如 CSV 数据):

const sales = {
    Jan: 1200, Feb: 1500 };
const total = Object.values(sales).reduce((a, b) => a + b, 0); // 2700

(2)表单验证与处理:快速检查表单字段值是否符合要求:

const formData = {
    username: 'admin', password: '' };
const isEmpty = Object.values(formData).some(val => !val.trim());
if (isEmpty) alert('存在未填项!');

(3)与数组方法结合:结合 map()、filter() 等方法处理对象值集合:

const users = {
    alice: 25, bob: 17 };
const adults = Object.values