zoukankan      html  css  js  c++  java
  • JavaScript大数组如何根据对象的key快速找到并删除

    查找:上代码.

    function isBigEnough(element) {
        return element >= 15;
    }
    
    var ret1 = [12, 5, 8, 130, 44].findIndex(isBigEnough);
    console.log(ret1);
    // index of 4th element in the Array is returned,
    // so this will result in '3'
    var objArr = [{id:1, name:'jiankian'}, {id:23, name:'anan'}, {id:188, name:'superme'}, {id:233, name:'jobs'}, {id:288, name:'bill', age:89}, {id:333}] ;
    var ret2 = objArr.findIndex((v) => {
        return v.id == 233;
    });
    console.log(ret2);
    // return 3

    findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

    语法:

    arr.findIndex(callback[, thisArg])

    参数:

    callback针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:

    element
    当前元素。
    index
    当前元素的索引。
    array
    调用findIndex的数组。

    thisArg可选。执行callback时作为this对象的值.

    描述:

    findIndex方法对数组中的每个数组索引0..length-1(包括)执行一次callback函数,直到找到一个callback函数返回真实值(强制为true)的值。如果找到这样的元素,findIndex会立即返回该元素的索引。如果回调从不返回真值,或者数组的length为0,则findIndex返回-1。 与某些其他数组方法(如Array#some)不同,在稀疏数组中,即使对于数组中不存在的条目的索引也会调用回调函数。

    回调函数调用时有三个参数:元素的值,元素的索引,以及被遍历的数组。

    如果一个 thisArg 参数被提供给 findIndex, 它将会被当作this使用在每次回调函数被调用的时候。如果没有被提供,将会使用undefined

    findIndex不会修改所调用的数组。

    在第一次调用callback函数时会确定元素的索引范围,因此在findIndex方法开始执行之后添加到数组的新元素将不会被callback函数访问到。如果数组中一个尚未被callback函数访问到的元素的值被callback函数所改变,那么当callback函数访问到它时,它的值是将是根据它在数组中的索引所访问到的当前值。被删除的元素仍然会被访问到。

    示例

    查找数组中首个质数元素的索引

    以下示例查找数组中素数的元素的索引(如果不存在素数,则返回-1)。

    function isPrime(element, index, array) {
      var start = 2;
      while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) {
          return false;
        }
      }
      return element > 1;
    }
    
    console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, not found
    console.log([4, 6, 7, 12].findIndex(isPrime)); // 2

    删除:上代码.

    var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
    
    myFish.splice(2, 0, 'drum'); // 在索引为2的位置插入'drum'
    // myFish 变为 ["angel", "clown", "drum", "mandarin", "sturgeon"]
    
    myFish.splice(2, 1); // 从索引为2的位置删除一项(也就是'drum'这一项)
    // myFish 变为 ["angel", "clown", "mandarin", "sturgeon"]

    语法

    array.splice(start)
    
    array.splice(start, deleteCount) 
    
    array.splice(start, deleteCount, item1, item2, ...)

    参数

    start​
    指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数);若只使用start参数而不使用deleteCount、item,如:array.splice(start) ,表示删除[start,end]的元素。
    deleteCount 可选
    整数,表示要移除的数组元素的个数。如果 deleteCount 是 0,则不移除元素。这种情况下,至少应添加一个新元素。如果 deleteCount 大于start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
    如果deleteCount被省略,则其相当于(arr.length - start)。
    item1, item2, ... 可选
    要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。

    splice方法使用deleteCount参数来控制是删除还是添加:
    start参数是必须的,表示开始的位置(从0计数),如:start=0从第一个开始;start>= array.length-1表示从最后一个开始。
    ①、从start位置开始删除[start,end]的元素。
    array.splice(start)
    ②、从start位置开始删除[start,Count]的元素。
    array.splice(start, deleteCount)    
    ③、从start位置开始添加item1, item2, ...元素。
    array.splice(start, 0, item1, item2, ...)   

    返回值

    由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。

    描述

    如果添加进数组的元素个数不等于被删除的元素个数,数组的长度会发生相应的改变。

    提示和注释

    注释:请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。

    示例

    从第2位开始删除0个元素,插入“drum”

    var myFish = ["angel", "clown", "mandarin", "surgeon"]; 
    //从第 2 位开始删除 0 个元素,插入 "drum" 
    var removed = myFish.splice(2, 0, "drum"); 
    //运算后的 myFish:["angel", "clown", "drum", "mandarin", "surgeon"] 
    //被删除元素数组:[],没有元素被删除

    从第3位开始删除1个元素

    var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
    var removed = myFish.splice(3, 1);
    //运算后的myFish:["angel", "clown", "drum", "sturgeon"]
    //被删除元素数组:["mandarin"]

    从第2位开始删除1个元素,然后插入“trumpet”

    var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
    var removed = myFish.splice(2, 1, "trumpet"); 
    //运算后的myFish: ["angel", "clown", "trumpet", "surgeon"] 
    //被删除元素数组:["drum"]

    从第0位开始删除2个元素,然后插入"parrot","anemone"和"blue"

    var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
    var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
    // 运算后的myFish: ["parrot", "anemone", "blue", "trumpet", "sturgeon"] 
    // 被删除元素数组:["angel", "clown"]

    从第2位开始删除2个元素

    var myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'];
    var removed = myFish.splice(myFish.length - 3, 2);
    // 运算后的myFish: ["parrot", "anemone", "sturgeon"] 
    // 被删除元素数组:["blue", "trumpet"]

    从第2位开始删除所有元素

    var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
    var removed = myFish.splice(2);
    // 运算后的myFish :["angel", "clown"] 
    // 被删除的元素数组: ["mandarin", "sturgeon"]
     
  • 相关阅读:
    chrome rpm旧版本下载地址
    windows 静态绑定arp
    ubuntu20开机自动打开浏览器全屏访问指定页面
    nginx+uwsgi+django+systemd部署django项目
    openresty编译安装
    windows服务器设置定时重启
    华为云和AWS之间打通内网
    python glob
    python subprocess
    python 异常
  • 原文地址:https://www.cnblogs.com/mophy/p/8608834.html
Copyright © 2011-2022 走看看