案例:
//先用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