nodejs 数组操作

数组操作

map

通过指定函数处理数组的每个元素,并返回处理后的数组。
map() 方法会将数组中元素依次传入方法中,并将方法的返回结果组成新数组返回。

传入的function可以有自己的三个形参,currentValue, index,arr分别代表当前元素,元素索引,元素所属数组对象;其中currentValue是必须的。

注意:map不会改变原数组,map不会检查空数组

filter

filter用于对数组进行过滤。
参数同map
它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素.
注意:filter()不会对空数组进行检测、不会改变原始数组

every

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
参数同map
every() 方法使用指定函数检测数组中的所有元素:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
    如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组。

some

some 和every 正好相反:
参数同map

some方法会依次执行数组的每个元素;

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测
    如果没有满足条件的元素,则返回false

includes

includes() 的参数和上面几个有区别,它可以作为辅助函数判断数组中是否包含某个元素。
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。

sort

sort() 方法用于对数组的元素进行排序。
注释:该方法会改变原始数组。

arrayObject.sort(sortby)

var arr = [10,5,1000,25,1];

console.log(`arr:\n${arr}`);
//sort 在原数组的上修改顺序

console.log(`after sort arr1:\n${arr.sort()}`);  //1,10,1000,25,5

console.log(`after sort arr2:\n${arr.sort((a,b)=>{return a-b})}`);  //a-b 升序  1,5,10,25,1000

console.log(`after sort arr3:\n${arr.sort((a,b)=>{return b-a})}`);  //b-a 降序 1000,25,10,5,1

splice

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
注释:该方法会改变原始数组。

arrayObject.splice(index,howmany,item1,…,itemX)

  • index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
  • howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
  • item1, …, itemX 可选。向数组添加的新项目。
var arr = [1, 2, 3, 4, 5, 6];
arr.splice(2, 3); // [3, 4, 5]   删除第三个元素以后的三个数组元素
 
arr.splice(2, 0, 7, 8);  // []   在第三个元素之前插入7和8
arr; // [1, 2, 7, 8, 9]
 
arr.splice(2, 3, 9, 10);  // [7, 8, 9]  删除第三个元素以后的三个数组元素,并用9和10代替
arr;  // [1, 2, 9, 10]

indexOf

可返回某个指定的字符串值在字符串中首次出现的位置。

stringObject.indexOf(searchvalue,fromindex)

  • searchvalue 必需。规定需检索的字符串值。
  • fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

注释:indexOf() 方法对大小写敏感!
注释:如果要检索的字符串值没有出现,则该方法返回 -1。

类似的函数

** lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。**

join

join() 方法用于把数组中的所有元素放入一个字符串。

元素是通过指定的分隔符进行分隔的。

arrayObject.join(separator)

  • separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

concat

concat() 方法用于连接两个或多个数组。

  • 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
arrayObject.concat(arrayX,arrayX,......,arrayX)

Object.entries Object.values

Object.entries()将一个对象中可枚举属性的键名和键值按照二维数组的方式返回,如果对象是数组,则会将数组的下标作为键值返回.
ES6中的 Object.keys() 返回的是键名,而 Object.values 则返回给定对象自己的所有可枚举属性值的数组,数组顺序,跟Object.entries()保持一致

Object.entries({ one: 1, two: 2 })    //[['one', 1], ['two', 2]]
Object.entries([1, 2])                //[['0', 1], ['1', 2]]

// === 若是键名是Symbol,编译时会被自动忽略 ====
Object.entries({[Symbol()]:1, two: 2})  //[['two', 2]]

// ==== entries()返回的数组顺序和for循环一样,即如果对象的key值是数字,则返回值会对key值进行排序====
Object.entries({ 3: 'a', 4: 'b', 1: 'c' })    //[['1', 'c'], ['3', 'a'], ['4', 'b']]

// === 利用Object.entries()创建一个真正的Map ===
var obj = { foo: 'bar', baz: 42 };

var map1 = new Map([['foo', 'bar'], ['baz', 42]]); //原本的创建方式
var map2 = new Map(Object.entries(obj));    //等同于map1

console.log(map1);// Map { foo: "bar", baz: 42 }
console.log(map2);// Map { foo: "bar", baz: 42 }

// === Object.keys() ===
Object.keys({ one: 1, two: 2 })  // ["one", "two"]
Object.keys({ 3: 'a', 4: 'b', 1: 'c' })  //  ["1", "3", "4"]

// === Object.values ===
Object.values({ one: 1, two: 2 })            //[1, 2]
Object.values({ 3: 'a', 4: 'b', 1: 'c' })    //['c', 'a', 'b']

应用

对象遍历

const users = {
    "5979942": {
        "uid": 5979942,
        "uname": "用户5979942",
        "ugender": 2
    },
    "5979945": {
        "uid": 5979945,
        "uname": "用户5979945",
        "ugender": 1
    },
    "5979946": {
        "uid": 5979946,
        "uname": "用户5979946",
        "ugender": 1
    }
}

console.log(`user:${JSON.stringify(users)}`);

//遍历方法1
console.log(`遍历方法1`);
for(let i in users){
    console.log(`i:${i},users[i]:${JSON.stringify(users[i])}`);
}

console.log(`遍历方法2`);
// 遍历方法2
Object.keys(users).map(v=>{console.log(`v:${v},info:${JSON.stringify(users[v])}`)})

在这里插入图片描述

数组应用

const actions = [
    {
        "uid": 5979946,
        "act": -1,
        "rate": 1,
        "time": 1596078572373,
        "delegated": false
    },
    {
        "uid": 5979942,
        "act": -1,
        "rate": 1,
        "time": 1596078575235,
        "delegated": false
    },
    {
        "uid": 5979945,
        "act": 1,
        "rate": 2,
        "time": 1596078578154,
        "delegated": false
    },
    {
        "uid": 5979945,
        "act": 3,
        "cards": [
            777,
            265,
            1033,
            515
        ],
        "rate": 2,
        "time": 1596078583879,
        "delegated": false
    }
]

console.log(`map:...................`)
actions.map( (v,i)=>{console.log(`i:${i},v:${JSON.stringify(v)}`)});

console.log(`filter:...................`)
let act1 = actions.filter((v,i)=>{return v.act > 0;})
console.log(`act1:${JSON.stringify(act1)}`);

console.log(`some:...................`)
let result = actions.some((v)=>{return v.act > 0})
console.log(`result:${result}`);

console.log(`every:...................`)
let result1 = actions.every((v)=>{return v.act > 0})
console.log(`result1:${result1}`);

在这里插入图片描述

数组差


let cards = [
    1035,
    270,
    779,
    526,
    1038,
    267,
    1033,
    772,
    1280,
    518,
    263,
    1037,
    1028,
    776,
    1036,
    782,
    780,
    265,
    777,
    515
];

const topCards =  [
    265,
    777,
    515
];


// 找到cards 中> 1000 的所有
let arr1 = cards.filter((value,index)=>{return value>1000});
console.log(`arr1:${arr1}`);

// 从cards 中删除topCards 的值
cards = cards.filter(v=>{return !topCards.includes(v)});
console.log(`cards:${cards}`)

在这里插入图片描述


版权声明:本文为weixin_39658118原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。