jquery 获取两个元素的索引并相应地操作数组

ltqd579y  于 10天前  发布在  jQuery
关注(0)|答案(3)|浏览(5)

我用下面的代码构建一个数组:

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我可以指定从哪里开始查找,但这很难满足我的目标。
有没有其他类型的搜索可以使用?

n6lpvg4x

n6lpvg4x1#

可以使用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;
}, []);
qojgxg4l

qojgxg4l2#

可以使用.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));
z9smfwbn

z9smfwbn3#

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 );

相关问题