【问题标题】:get the index of two elements and manipulate the array accordingly获取两个元素的索引并相应地操作数组
【发布时间】:2023-01-24 22:04:40
【问题描述】:

我使用以下代码构建一个数组:

var intestColonne = [];
$('.tbi').find('tr:first th').each(function(){
    intestColonne.push(($(this).children('select').val()));
});
//intestColonne=intestColonne.pop();  //if this row is parsed the array becomes undefined

现在我想检查数组中是否有多个特定值的条目:

if(intestColonne.filter(x => x === "importo").length>1){
    //check the index of each "importo" element
    //store it into variables
    //remove all the other "importo" leaving only the first (lowest index)
}

我停留在第一步,因为我还没有找到可以返回“importo”值的所有索引的特定函数。

indexOf 将返回第一个索引,lastIndexOf 将返回最后一个。使用 indexOf 我可以指定从哪里开始寻找,但这很难满足我的目标。

我可以使用其他类型的搜索吗?

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    可以使用map获取filter之前元素的索引。

    intestColonne.map((x, i) => x === 'importo' ? i : null).filter(x => x != null);
    

    或者,使用Array#reduce

    intestColonne.reduce((acc, curr, i) => {
        if (curr === 'importo') acc.push(i);
        return acc;
    }, []);
    

    【讨论】:

      【解决方案2】:

      您可以使用 .map() 方法创建数组中特定值的所有索引的数组。这是一个例子:

      var importoIndexes = intestColonne.map((value, index) => value === "importo" ? index : '').filter(String);
      

      这将创建一个数组 importoIndexes,其中包含 intestColonne 数组中值“importo”的所有索引。

      然后,您可以使用 .slice() 方法删除所有其他“importo”,只留下第一个(最低索引)

      intestColonne = intestColonne.slice(0, importoIndexes[0]).concat(intestColonne.slice(importoIndexes[0] + 1));
      

      【讨论】:

        【解决方案3】:

        Javascript 数组过滤器方法的第二个参数提供元素的索引。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

        因此,您可以使用 indexOf 获取第一个元素的索引,然后对其进行过滤:

        const index = intestColonne.indexOf("importo");
        const result = intestColonne.filter( (o,i) => o !== "importo" || i === index );
        

        【讨论】:

          猜你喜欢
          • 2018-05-02
          • 2020-11-27
          • 2021-05-13
          • 1970-01-01
          • 1970-01-01
          • 2011-06-27
          • 1970-01-01
          • 1970-01-01
          • 2014-10-25
          相关资源
          最近更新 更多