我有两个数组
arr = [ aaa, xxx, aaa, xxx, aaa ]; foundIn = [ 1, 3 ];
如您所见,foundIn具有要删除的索引号arr。如何使用foundIn中的索引值删除arr中的值
The output being: newArr = [ aaa, aaa, aaa ];
这是我的问题的简化版本。在这方面的任何帮助将不胜感激。
7lrncoxx1#
您可以利用原生javascript .filter()方法来解决这类问题。
.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。因此,所有返回的元素都是foundIn中not exists的元素。.indexOf()返回搜索项的索引,如果未找到,则返回-1。如果您使用的是es6,您可以简化代码:
arr
index
foundIn
.indexOf()
true
-1
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"]
dy2hfwbg2#
你有几个选择。1.以反向索引顺序循环通过foundIn(例如,最高者优先;您可以使用sort对其进行排序),并使用splice从另一个数组中删除它们。1.在arr上使用filter,对于在foundIn中找不到的索引返回false(但每次都需要重新搜索foundIn)1.从带有索引键的foundIn构建一个带有索引键的对象(或者ES2015及更高版本中的一个Set索引),然后使用arr.filter在Map中查找索引,看看是否应该删除它们。前两个问题很简单,我将把编码工作留给您,最后一个问题可能需要代码来解释:
sort
splice
filter
Set
arr.filter
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);
b1zrtrql3#
我想我可能想到了一些东西平面数组Map((x,i)=〉在包含(i)的数组中找到?[]:(十)希望你喜欢。
8oomwypt4#
你可以使用filter(el,index)来完成:
arr.filter(function(el, index) { return foundIn.indexOf(index) > -1; });
过滤器返回一个数组,其中包含条件返回为真的所有元素.在我的例子中,所有索引存在于foundIn中的元素
4条答案
按热度按时间7lrncoxx1#
您可以利用原生javascript
.filter()
方法来解决这类问题。解释
回调将在调用此函数的每个循环中执行(在上例中,它将用于
arr
变量)。两个参数被传入回调函数,第一个是element,第二个是index,因为需要
index
,所以即使不使用第一个参数,也必须写入这两个参数。在这个问题中,
index
变量被用来判断它是否存在于foundIn
变量上(我们使用.indexOf()
方法来检查)。如果它是not exists,则将给出true
。因此,所有返回的元素都是foundIn
中not exists的元素。.indexOf()
返回搜索项的索引,如果未找到,则返回-1
。如果您使用的是es6,您可以简化代码:
还可以尝试以下工作示例:
dy2hfwbg2#
你有几个选择。
1.以反向索引顺序循环通过
foundIn
(例如,最高者优先;您可以使用sort
对其进行排序),并使用splice
从另一个数组中删除它们。1.在
arr
上使用filter
,对于在foundIn
中找不到的索引返回false(但每次都需要重新搜索foundIn
)1.从带有索引键的
foundIn
构建一个带有索引键的对象(或者ES2015及更高版本中的一个Set
索引),然后使用arr.filter
在Map中查找索引,看看是否应该删除它们。前两个问题很简单,我将把编码工作留给您,最后一个问题可能需要代码来解释:
或ES2015(又名"ES6")及以上版本:
b1zrtrql3#
我想我可能想到了一些东西平面数组Map((x,i)=〉在包含(i)的数组中找到?[]:(十)
希望你喜欢。
8oomwypt4#
你可以使用filter(el,index)来完成:
过滤器返回一个数组,其中包含条件返回为真的所有元素.在我的例子中,所有索引存在于foundIn中的元素