Array 方法大全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Array 方法大全相关的知识,希望对你有一定的参考价值。

参考技术A 操作数组

印象中数组有很多方法,系统的整理一下,放在自己家里方便回头查~

Array.map()

1、Array.map()

此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组

let arr = [1, 2, 3, 4, 5]

    let newArr = arr.map(x => x*2)

    //arr= [1, 2, 3, 4, 5]   原数组保持不变

    //newArr = [2, 4, 6, 8, 10] 返回新数组

2、Array.forEach()

此方法是将数组中的每个元素执行传进提供的函数,没有返回值,直接改变原数组,注意和map方法区分

let arr = [1, 2, 3, 4, 5]

   num.forEach(x => x*2)

   // arr = [2, 4, 6, 8, 10]  数组改变,注意和map区分

3、Array.filter()

此方法是将所有元素进行判断,将满足条件的元素作为一个新的数组返回

let arr = [1, 2, 3, 4, 5]

    const isBigEnough => value => value >= 3

    let newArr = arr.filter(isBigEnough )

    //newNum = [3, 4, 5] 满足条件的元素返回为一个新的数组

4/Array.every()

此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回true,否则为false:

let arr = [1, 2, 3, 4, 5]

    const isLessThan4 => value => value < 4

    const isLessThan6 => value => value < 6

    arr.every(isLessThan4 ) //false

    arr.every(isLessThan6 ) //true

5、Array.some()

此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回true,若所有元素都不满足判断条件,则返回false:

let arr= [1, 2, 3, 4, 5]

    const isLessThan4 => value => value < 4

    const isLessThan6 => value => value > 6

    arr.some(isLessThan4 ) //true

    arr.some(isLessThan6 ) //false

6、Array.reduce()

此方法是所有元素调用返回函数,返回值为最后结果,传入的值必须是函数类型:

let arr = [1, 2, 3, 4, 5]

   const add = (a, b) => a + b

   let sum = arr.reduce(add)

   //sum = 15  相当于累加的效果

   与之相对应的还有一个 Array.reduceRight() 方法,区别是这个是从右向左操作的

7、Array.push()

此方法是在数组的后面添加新加元素,此方法改变了数组的长度:

8、Array.pop()

此方法在数组后面删除最后一个元素,并返回数组,此方法改变了数组的长度:

let arr = [1, 2, 3, 4, 5]

    arr.pop()

    console.log(arr) //[1, 2, 3, 4]

    console.log(arr.length) //4

9、Array.shift()

此方法在数组后面删除第一个元素,并返回数组,此方法改变了数组的长度:

let arr = [1, 2, 3, 4, 5]

    arr.shift()

    console.log(arr) //[2, 3, 4, 5]

    console.log(arr.length) //4 

10、Array.unshift()

此方法是将一个或多个元素添加到数组的开头,并返回新数组的长度:

let arr = [1, 2, 3, 4, 5]

    arr.unshift(6, 7)

    console.log(arr) //[6, 7, 2, 3, 4, 5]

    console.log(arr.length) //7 

11、Array.isArray()

判断一个对象是不是数组,返回的是布尔值

12、Array.concat()

此方法是一个可以将多个数组拼接成一个数组:

let arr1 = [1, 2, 3]

      arr2 = [4, 5]

  let arr = arr1.concat(arr2)

  console.log(arr)//[1, 2, 3, 4, 5]

13、Array.toString()

此方法将数组转化为字符串:

let arr = [1, 2, 3, 4, 5];

   let str = arr.toString()

   console.log(str)// 1,2,3,4,5

14、Array.join()

  此方法也是将数组转化为字符串:

let arr = [1, 2, 3, 4, 5];

   let str1 = arr.toString()

   let str2 = arr.toString(',')

   let str3 = arr.toString('##')

   console.log(str1)// 12345

   console.log(str2)// 1,2,3,4,5

   console.log(str3)// 1##2##3##4##5

通过例子可以看出和toString的区别,可以设置元素之间的间隔~

15.Array.splice(开始位置, 删除的个数,元素)

万能方法,可以实现增删改:

let arr = [1, 2, 3, 4, 5];

     let arr1 = arr.splice(2, 0 'haha')

     let arr2 = arr.splice(2, 3)

     let arr1 = arr.splice(2, 1 'haha')

     console.log(arr1) //[1, 2, 'haha', 3, 4, 5]新增一个元素

     console.log(arr2) //[1, 2] 删除三个元素

     console.log(arr3) //[1, 2, 'haha', 4, 5] 替换一个元素

还有些方法没加进来的以后会补充

VBScript - 动态 Array 实现方法大全!

记录一些方法,关于 VBScript 中,动态 Array 的实现 ,也适用于 VBA,

很久以前,写 VBA 的时候,就觉得使用 Array 很不方便,因为大小固定,
当时想的是,要是 Array 可以像 Python 里的 list 一样好用该多好啊,
那么下面,就记录一些方法,能让 Array 变得动态,并且好用!

实现方法-1:

在下面的实例中,先设定一个空的 Array 出来,
然后用,下面的方法实现动态 Array,
并且,把数字 1 到 10,一个加到 Array 中去。

‘动态 Array 实现
myArray = Array()
For i = 1 To 10
    ReDim Preserve myArray(UBound(myArray) + 1)
    myArray(UBound(myArray)) = i
Next

那么动态 Array 就这么开心的实现啦,(^_?)☆

对比下和 Python list 的代码吧,感觉是不是很像呢。

# Python 中 list 的使用
myList = list()
for i in range(10):
    myList.append(i)
print(myList)

数据输出:

然后,思考下一个问题,也是我之前写 VBA 时候考虑的问题,
就是,怎么一下子,看到 Array 中所有的数据,
之前的本方法,是使用 For Loop,把 Array 中的数据一个个 Print 出来,
但是现在发现了简单的方法,代码如下:

‘最简单的方法:
MsgBox Join (myArray, vblf)

‘之前使用的笨方法:
For Each i In myArray
    Debug.Print i
Next

实现方法-2:

之后 Research 还发现了更多的方法,来实现近似动态 Array 的方法,
其中一种,就是使用,CreateObject("Scripting.Dictionary"),
Scripting.Dictionary 是字典对象的 ProgID,
但,这种方法使用的,并不是 VBScript 自带的 Object,
而是,调用了 Microsoft Scripting Runtime Library (SCRRUN.DLL) 中的一个对象,
字典(Dictionary),通常也被称为 associative array (关联数组),
但是,从数据类型上说,字典是一个 Object,并不是 Array,
具体使用方法如下:

‘创建一个字典(dic)
    Set dic = CreateObject("Scripting.Dictionary")

‘添加,键值/名称 (key/item)
    dic.Add "a", "Athens"
    dic.Add "b", "Belgrade"
    dic.Add "c", "Cairo"

‘如果不想,成对的添加值,可以省略 item,只添加 key
    dic.Add "Key1", ""
    dic.Add "Key2", ""
    dic.Add "Key3", ""

‘删除,键值/名称 (只能通过 key 来删除)
    dic.remove "b"

‘删除字典中所有值
    dic.RemoveAll 

‘返回字典中 Item 的个数
    dic.Count

‘判断某个 key 是否已经存在于字典中了,
‘如果已经存在了,我们可以选择不添加到字典中,
‘这种方法可以用于,对数据去重,选出 Unique Value!
    dic.Exists("c")

‘遍历字典的方法
    oKeys = dic.Keys
    oItems = dic.Items
        For i = 0 To dic.Count - 1
            MsgBox (oKeys(i) & " : " & oItems(i))
        Next

实现方法-3:

还有一种方法,就是使用CreateObject("System.Collections.ArrayList")
这种方法调用的是,属于.NET Framework(4.8)下的 COM,源自于 mscorlib.tlb 文件,
这种方法下,比使用 Dictionary 的方法,多了个更方便的“排序功能”,
而,要想在 Dictionary 中进行排序,可是很麻烦的,要使用多层 Loop,
而这种方法下,只需要使用,一个 Method 即可,ArrList.sort
具体使用方法如下:

‘调用 Object,创建 ArrayList
    Set ArrList = CreateObject("System.Collections.ArrayList")

‘添加 Item 进 ArrayList
    ArrList.Add "Item3"
    ArrList.Add "Item2"
    ArrList.Add "Item1"

‘返回 ArrayList 中 Item 个数
    ArrList.Count

‘返回 ArrayList 的容量
    ArrList.Capacity

‘对 ArrayList 排序
    ArrList.Sort

‘删除 Item
    ArrayList.Remove("Item1")

‘清空 ArrayList
    ArrayList.Clear

‘遍历 ArrayList 中的 Items
    For i = 0 To ArrList.Count - 1
        WScript.Echo ArrayList(i)
    Next

实现方法-4(VB,VBA 专用):

这种方法使用的是,Collection 数据类型,
而,VBScript 下面是没有 Collection 这种数据类型的,
所以,这种方法是 VB 和 VBA 专用的方法,
VBScript 中常用的类似方法,是上面那两种,
那么,我们来看下,具体使用方法:

‘声明变量,创建 Collection 对象
    Dim Coll As Collection
    Set Coll  = New Collection

‘添加元素,添进去的数据,是 String 类型
    Coll.Add "Data1"
    Coll.Add "Data2"
    Coll.Add "Data3"

‘在第二个元素之前,添加新元素
    Coll.Add "Data4", Before:=2

‘删除第二个元素
    Coll.Remove 2

‘读取 Collection 中的数据
    Debug.Print Coll(1)
    Debug.Print Coll.Item(2)

‘往 Collection 里面添加 Object(对象)
    Dim Coll As New Collection    ‘创建一个 Collection
    Dim New_Object As New Class1    ‘创建一个新 Class Object
        New_Object.fruit = "Apple"    ‘设定新 Object 的 fruit 属性,等于 Apple
        coll.Add New_Object    ‘把这个新 Object添加到,我们的 Collection 中去
            Debug.Print Coll(1).fruit    ‘访问 Collection 中,Object 的属性

‘也可以像字典一样使用,Key 必须是 String,而且 Unique
    Coll.Add Item:="Apple", key:="Key1"
    Coll.Add "Orange", "Key2"

‘访问 Collection 中的 Item,只能通过 Key 访问 Item,没法反过来
    Debug.Print Coll("Key1")


篇尾总结:

差不多,在 VBScript,或者 VBA,想要实现动态 Array,无非就是这些方法了,
从性质上分类,大致就两类,要么就是使用自带的 Array,不断的改变 Array的大小,
要么就是,使用其他各种 Object,来实现类似数组功能的感觉,
好的,就这些了,希望对大家有帮助,
小白贡献,语失莫怪。

参考阅读:

  1. VBA 字典与集合(Dictionary与Collection)
  2. Lists in VBScript - Stack Overflow
  3. Dictionary object | Microsoft Docs
  4. Windows Script Host - Tim Hill - Google Books
  5. Does VBA have Dictionary Structure? - Stack Overflow
  6. VBS基础篇 - 动态数组
  7. asp classic - What really is a Collection object in asp using vbscript? - Stack Overflow
  8. The Ultimate Guide To Collections in Excel VBA - Excel Macro Mastery
  9. VBA for smarties: Collection
  10. ArrayList Class (System.Collections) | Microsoft Docs







































以上是关于Array 方法大全的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 数组方法整理大全

PHP提取多维数组指定一列的方法大全

PHP提取多维数组指定一列的方法大全

JavaScript数组方法大全(第二篇)

JavaScript 数组常用方法大全

数组方法大全