Nodejs JS 怎样遍历 Array 的所有方法?

Nodejs JS 怎样遍历 Array 的所有方法?

for key in Array.prototype 这样也不能遍历… 哪些方法总要定义在一个地方的吧, 难道设定了 JS 不能访问?

我在 MDN 上看到的代码… 难道是 Firefox 专用的代码? https://developer.mozilla.org/en-US/docs/DOM/NodeList

for(prop in Array.prototype){
  if(Array.prototype.hasOwnProperty(prop) && typeof(Array.prototype[prop]) === 'function')
    NodeList[prop] = Array.prototype[prop];
}

5 回复

在 Node.js 中遍历数组(Array)的方法可以使用多种方式。你的问题似乎更关注于如何遍历 Array.prototype 上的所有方法,而不是遍历数组本身。下面我会分别介绍这两种情况。

1. 遍历数组本身

遍历数组是最常见的操作之一,可以使用以下几种方法:

1.1 使用 for 循环

const arr = [1, 2, 3, 4];

for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

1.2 使用 forEach

const arr = [1, 2, 3, 4];

arr.forEach((item) => {
  console.log(item);
});

1.3 使用 for...of 循环

const arr = [1, 2, 3, 4];

for (const item of arr) {
  console.log(item);
}

2. 遍历 Array.prototype 的所有方法

如果你想遍历 Array.prototype 上的所有方法,你可以使用 for...in 循环,并检查每个属性是否为函数。以下是代码示例:

for (const prop in Array.prototype) {
  if (Array.prototype.hasOwnProperty(prop) && typeof Array.prototype[prop] === 'function') {
    console.log(`Method: ${prop}`);
  }
}

这段代码会列出 Array.prototype 上所有的函数(方法),如 push, pop, shift, unshift, slice, splice 等等。

解释

  • for...in 循环:用于遍历对象的所有可枚举属性。
  • hasOwnProperty 方法:确保我们只遍历 Array.prototype 自身的属性,而不是继承来的属性。
  • typeof 检查:确保我们只处理函数(方法)。

注意,这种方法不会遍历那些从原型链继承的方法(如 toStringvalueOf)。这些方法通常是通用的 JavaScript 对象方法,不是特定于数组的。


回去翻这份资料才找到… http://killdream.github.com/blog/2011/10/understanding-javascript-oop/#sec-1-8

Object.getOwnPropertyNames(mikhail)
// => [ 'name', 'age', 'gender', 'first_name', 'last_name' ]

不知道是不兼容性问题, 网上似乎不太推荐扩展 DOM… 算了先写…

Object.getOwnPropertyNames(Array.prototype).forEach (prop) ->
  if Array.prototype[prop]?
    if (typeof Array.prototype[prop]) is "function"
      NodeList.prototype[prop] = Array.prototype[prop]

for in只能列出可枚举属性和方法

要在 Node.js 中遍历 Array 的所有方法,可以使用 for...in 循环。需要注意的是,这种方法会遍历原型链上的所有属性,包括非枚举属性和继承的属性。为了只获取数组的方法(即函数),我们可以添加一个条件来过滤出函数类型。

以下是一些常见的遍历 Array 方法的方式:

示例代码

// 创建一个空数组以测试原型上的方法
const arr = [];

// 使用 for...in 循环遍历 Array.prototype
for (let key in Array.prototype) {
  // 确保属性是自身的,并且是函数
  if (Array.prototype.hasOwnProperty(key) && typeof Array.prototype[key] === 'function') {
    console.log(key);
  }
}

// 输出结果:
// push
// pop
// shift
// unshift
// splice
// slice
// concat
// sort
// reverse
// indexOf
// lastIndexOf
// every
// some
// forEach
// map
// filter
// reduce
// reduceRight

解释

  1. for…in 循环:这种循环可以遍历对象的所有可枚举属性,包括从原型链上继承的属性。
  2. hasOwnProperty:确保我们只获取到当前对象(Array.prototype)自身拥有的属性,而不是从原型链上继承的属性。
  3. typeof Array.prototype[key] === ‘function’:确保我们只获取到函数类型的属性,因为 Array 的方法都是函数。

注意事项

  • for...in 循环会遍历原型链上的所有属性,因此最好结合 hasOwnProperty 方法来过滤掉继承的属性。
  • 如果你需要对每个数组元素进行操作,可以使用 forEach, map, filter 等方法,而不是遍历 Array.prototype

希望这些示例代码能帮助你理解如何在 Node.js 中遍历 Array 的所有方法。

回到顶部