📜  在 JavaScript 中实现 Object.values() 的方法(1)

📅  最后修改于: 2023-12-03 15:07:40.831000             🧑  作者: Mango

在 JavaScript 中实现 Object.values() 的方法

在 JavaScript 中,Object.values() 可以获取对象中所有属性值,并返回一个数组。但这个方法并不是所有浏览器都支持,所以我们需要自己实现一个类似的方法。下面是一个简单的示例。

使用 Object.keys() 和 map() 方法
function objectValues(obj) {
  return Object.keys(obj).map(key => obj[key]);
}

这个方法中,首先使用 Object.keys() 获取对象中所有的属性名,返回一个数组。然后使用 map() 方法遍历这个数组,并返回对应属性名的属性值,并组成一个新的数组返回。

使用 for...in 循环
function objectValues(obj) {
  let values = [];
  for (let prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
      values.push(obj[prop]);
    }
  }
  return values;
}

这个方法中,遍历对象的所有属性名,并使用 hasOwnProperty() 方法判断该属性名是否为对象自己的属性。如果是,则将对应的属性值添加到一个数组中,并最终返回数组。

使用 Object.getOwnPropertyNames() 方法
function objectValues(obj) {
  let propNames = Object.getOwnPropertyNames(obj);
  let values = [];
  for (let i = 0; i < propNames.length; i++) {
    let propName = propNames[i];
    values.push(obj[propName]);
  }
  return values;
}

这个方法中,首先使用 Object.getOwnPropertyNames() 方法获取对象的所有属性名,返回一个数组。然后使用 for 循环遍历这个数组,并返回对应属性名的属性值,并组成一个新的数组返回。

以上三种方法都能够实现类似 Object.values() 的功能,可以根据实际需求进行选择。需要注意的是,使用 for...in 循环可能会遍历到原型链上的属性,所以需要使用 hasOwnProperty() 方法进行判断。