我正在查看练习并且无法理解以下内容的工作方式(我试图从数组中删除重复项)
var arr = ['a','b','c','a','b','d','e','f'];
var uniqueArray = arr.filter(function(item,pos){
return arr.indexOf(item) == pos;
});
我尝试理解
此处item
接受arr
中的所有值。让我们进行一次迭代
First item = 'a'
和pos = 0
。好。现在我们只想根据'a'
的索引是否与0
此处indexOf(a) == 0
。
大!这是真的,让我们把它放在新的数组中。
现在让我们再前往我们再次看到的地方,即pos = 3
arr.indexOf(a) == 3
等等......这是否符合我们的要求?这怎么会删除重复?
答案 0 :(得分:1)
indexOf
只返回一个整数值,它是第一个找到的项的索引。因此,当pos
为3(并且item
为a
)时,indexOf
将返回0(因为a
的第一个索引为0),{ {1}}为false,元素将被删除。
然后,当0==3
为4(且pos
为item
)时,b
返回2,即找到的第一个indexOf
的索引。< / p>
对于对象,它们不能有重复的键。每个新密钥都会自动覆盖旧密钥,因此不会有任何重复。
查找
b
答案 1 :(得分:1)
nicael是对的。 indexOf(item)
只是一个遍历数组的函数,它会在数组中第一次查找item
,并返回数组中的位置。在您的示例中,如果a
位于0且a
位于索引3处,则indexOf('a')
将返回位置0,而pos
的值为3,因此filter返回false。
关注:
indexOf()
有另一个名为fromIndex的参数,它允许您从数组开头以外的位置开始搜索。在这种情况下,您可以通过执行'a'
来指定跳过第一次arr.indexOf('a', 1)
,这会在位置1处开始搜索,而不是0.在这种情况下,函数将从下一个{{返回true]返回true 1}}位于第3位。
我可以在对象上使用过滤器吗?
不,因为filter是Array对象的特定功能。您可以通过在'a'
上执行过滤来获取对象的键,因为keys()返回一个数组。
使用您的示例:
Object.keys(myObject)
答案 2 :(得分:-1)
Hashtable是消除冗余值的最佳方法 这是代码:
char arr[] = ['a','b','c','a','b','d','e','f'];
//it will contains all 26 places as zero (A - Z)
char hashArray[26]={0}
int i; //for iteration;
for(i=0;arr[i]!='\0';i++)
{
//it will subtracte the ascii value of the letter
//from 'a' so that we have the values from 0 to 26)
hashArray[arr[i]-'a']=arr[i];
}
for(i=0;i<26;i++)
{
if(hashArray[i]!=0) //to Ensure the positon has the character
{
printf("%c",hashArray[i]);
}
}