jquery 使用索引数组筛选其他数组

r3i60tvu  于 2023-02-03  发布在  jQuery
关注(0)|答案(4)|浏览(101)

我有两个数组

arr = [ aaa, xxx, aaa, xxx, aaa ];

foundIn = [ 1, 3 ];

如您所见,foundIn具有要删除的索引号arr。如何使用foundIn中的索引值删除arr中的值

The output being: newArr = [ aaa, aaa, aaa ];

这是我的问题的简化版本。
在这方面的任何帮助将不胜感激。

7lrncoxx

7lrncoxx1#

您可以利用原生javascript .filter()方法来解决这类问题。

var arr = ["aaa", "xxx", "aaa", "xxx", "aaa"];
var foundIn = [1, 3];
var res = arr.filter(function (eachElem, index) {
    return foundIn.indexOf(index) == -1
})

console.log(res) // ["aaa", "aaa", "aaa"]

解释

回调将在调用此函数的每个循环中执行(在上例中,它将用于arr变量)。
两个参数被传入回调函数,第一个是element,第二个是index,因为需要index,所以即使不使用第一个参数,也必须写入这两个参数。
在这个问题中,index变量被用来判断它是否存在于foundIn变量上(我们使用.indexOf()方法来检查)。如果它是not exists,则将给出true。因此,所有返回的元素都是foundInnot exists的元素。
.indexOf()返回搜索项的索引,如果未找到,则返回-1
如果您使用的是es6,您可以简化代码:

var res = arr.filter((d, i) => foundIn.indexOf(i) == -1)

还可以尝试以下工作示例:

var arr = ["aaa", "xxx", "aaa", "xxx", "aaa"];
var foundIn = [1, 3];
var res = arr.filter(function (eachElem, index) {
    return foundIn.indexOf(index) == -1
})

document.write(JSON.stringify(res))
// ["aaa", "aaa", "aaa"]
dy2hfwbg

dy2hfwbg2#

你有几个选择。
1.以反向索引顺序循环通过foundIn(例如,最高者优先;您可以使用sort对其进行排序),并使用splice从另一个数组中删除它们。
1.在arr上使用filter,对于在foundIn中找不到的索引返回false(但每次都需要重新搜索foundIn
1.从带有索引键的foundIn构建一个带有索引键的对象(或者ES2015及更高版本中的一个Set索引),然后使用arr.filter在Map中查找索引,看看是否应该删除它们。
前两个问题很简单,我将把编码工作留给您,最后一个问题可能需要代码来解释:

var arr = ["aaa", "xxx", "aaa", "xxx", "aaa"];

var foundIn = [1, 3];

var map = Object.create(null);
foundIn.forEach(function(entry) {
  map[entry] = true;
});
arr = arr.filter(function(_, index) {
  return !map[index];
});

console.log(arr);

或ES2015(又名"ES6")及以上版本:

let arr = ["aaa", "xxx", "aaa", "xxx", "aaa"];

let foundIn = [1, 3];
let set = new Set(foundIn);
arr = arr.filter((_, index) => !set.has(index));

console.log(arr);
b1zrtrql

b1zrtrql3#

我想我可能想到了一些东西平面数组Map((x,i)=〉在包含(i)的数组中找到?[]:(十)
希望你喜欢。

8oomwypt

8oomwypt4#

你可以使用filter(el,index)来完成:

arr.filter(function(el, index) { 
         return foundIn.indexOf(index) > -1;
 });

过滤器返回一个数组,其中包含条件返回为真的所有元素.在我的例子中,所有索引存在于foundIn中的元素

相关问题