首页技术js数组方法有哪些,js数组去重

js数组方法有哪些,js数组去重

编程之家2026-06-201029次浏览

大家好,今天小编来为大家解答以下的问题,关于js数组方法有哪些,js数组去重这个很多人还不知道,现在让我们一起来看看吧!

js数组方法有哪些,js数组去重

Javascript中数组的常用方法有哪些

concat()连接两个或更多的数组,并返回结果。

join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

pop()删除并返回数组的最后一个元素

push()向数组的末尾添加一个或更多元素,并返回新的长度。

reverse()颠倒数组中元素的顺序。

shift()删除并返回数组的第一个元素

js数组方法有哪些,js数组去重

slice()从某个已有的数组返回选定的元素

sort()对数组的元素进行排序

splice()删除元素,并向数组添加新元素。

toSource()返回该对象的源代码

toString()把数组转换为字符串,并返回结果。

toLocaleString()把数组转换为本地数组,并返回结果。

js数组方法有哪些,js数组去重

unshift()向数组的开头添加一个或更多元素,并返回新的长度。

valueOf()返回数组对象的原始值

JS数组方法

数组的创建方式

1.字面量的形式: var arr=[1,2,3];

1.构造函数: var arr1=new Array();//不常用

Array构造函数有一个很大的缺陷,就是不同的参数,会导致它的行为不一致。

1.单个数值作为参数,参数表示数组的元素个数

可以看到,Array作为构造函数,行为很不一致。因此,不建议使用它生成新数组,直接使用数组字面量是更好的做法。

push/pop/unshift/shift//增加、删除元素(数组的方法,所以使用时应调用

数组名.方法名())

arr. slice/splice//截取元素

arr.slice();原数组不发生改变

无参数时,返回原数组,相当于数组的复制。

一个参数时,从参数作为下标的元素截取,至数组结束。

二个参数时,从第一个参数作为下标(索引)的元素开始截取,到第二个参数作为下标的元素结束,但不包括第二个参数作为下标的函数。(起始元素包含,结尾元素不包含)

多个参数时,前两个参数起效,后边的参数无效。

arr.splice();原数组改变

无参数时,返回空数组。

一个参数时,从参数作为下标的元素截取,至数组结束。

二个参数时,从第一个参数作为下标(索引)的元素开始截取,即表示截取的起始位置,第二个参数表示截取的元素个数。

多个参数时,前两个参数起效,后边的参数从原数组的截取起始位置开始填充,填充到原数组。

reverse/sort//改变元素位置

arr.reverse();//数组翻转(元素位置颠倒)

arr.sort();从小到大排序,但遵循的是字符串的按位比较规则,所以排序结果容易出现异常。

join();//不改变原数组

join()以指定参数作为连接符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

concat();//拼接数组不改变原数组

ES5新增数组操作方法

indexOf(item)返回元素在数组中对应的索引值,找不到的话,返回-1,用以测试元素是否存在于数组中

forEach(function(item,index))遍历数组,没有返回值

map(function(item,index))遍历数组,存在返回值

filter(function(item)){return item>2}返回大于2的元素

some返回布尔值,条件部分成立|| arr.some(function(item){return item>2})

every返回布尔值,条件全部成立&& arr.every(function(item){return item>2})

reduce(对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。)arr.reduce(function(a,b){return a+b;});

toString()和toLocaleString()

功能:将数组的每个元素转化为字符串,并且输出用逗号分隔的字符串列表。功能类似join();

参数:无

输出:字符串

indexOf()和lastIndexOf()

功能:搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1;lastIndexOf为反向搜索。

参数:元素的值,起点索引(可选)

输出:索引值或-1

Array.from()

功能:将两类对象转为真正的数组:类似数组的对象和可遍历的对象

参数:待转换的对象,第二个参数可选,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

输出:数组

Array.of()

功能:将一组值,转换为数组。

参数:数组元素

输出:数组

copyWithin()

功能:在当前数组内部,将指定位置的成员复制到其他位置,返回变化后的数组。

参数:索引(从该位置开始替换数据);索引(从该位置开始读取数据,默认为0,负值表示倒数);索引(到该位置前停止读取,默认为最大索引)

输出:返回当前替换后的数组。

注意:改变了当前数组

find()和findIndex()

功能:找到第一个符合条件的数组成员。

参数:回调函数,所有数组成员依次执行该函数,直到找到第一个返回值为true的成员。回调函数可以接受三个参数,依次为值,位置,原数组。

输出:find()返回找到的成员;findIndex()返回成员的位置。

fill()

功能:使用给定的值,填充一个数组。

参数:第一个参数为待填充的值,第二和第三参数可选,分别表示填充的起始和结束位置(不包括)。

输出:填充后的数组

entries()、keys()、values()

功能:用于遍历数组,可以用for…of循环进行遍历。区别是keys()是对键名的遍历、values是对键值的遍历、entries()是对键值对的遍历。

参数:无

输出:遍历器对象

includes()

功能:表示某个数组是否包含给定的值

参数:第一个参数必选(待检查的给定值),第二个参数可选,表示搜索的起始位置,默认为0,负数表示倒数的位置。

输出:一个布尔值。

注意:和indexOf的区别,indexOf进行了运算符的强比对,会导致对NaN误判。

Js基础算法有哪些

这次给大家带来Js基础算法有哪些,使用Js基础算法的注意事项有哪些,下面就是实战案例,一起来看一下。

素数

Q:你将如何验证一个素数?

A:一个素数只能被它自己和1整除。所以,我将运行一个while循环并加1。(看代码示例,如果你无法理解,那这不是你的菜。先回去学习javaScript基础知识然后再回来吧。)

方法1

function isPrime(n){

var pisor= 2;

while(n> pisor){

if(n% pisor== 0){

return false;

}

else

pisor++;

}

return true;

}

isPrime(137);//= true

isPrime(237);//= falseQ:你能做得更好吗?

A:可以。除数一次增加1个。在3之后我可以增加2.如果一个数可以被任何偶数整除,它将被2整除。

补充:如果你不需要把除数增加到这个数。你可以更早停止。让我在下面的步骤中解释一下(如果需要可以多读几遍)

第一步,任何数字都不能被大于它的一半的数字整除。例如,13将永远不能被7,8,9整除??它甚至可以是偶数的一半。例如,16将被8整除,但永远不会被9,10,11,12??

结论:一个数字将永远不能被一个大于其一半数值的数字整除。所以,我们可以少循环50%。

第二步,现在,如果一个数字不能被3整除。(如果它可被3整除,那么它就不是质数)。然后,它不可以被大于其值1/3的任何数整除。例如,35不能被3整除。因此,它永远不会被大于35/3的数整除,永远不能被12, 13, 14整除?如果你取一个像36一样的偶数,它将永远不能被13, 14, 15整除。

结论:一个数字可以被其数值的三分之一整除。

第三步,例如,你有一个数字127。127不能被2整除,因此你最多应该检查63.5。其次,127不能被3整除。因此,您将检查到127/3大约42。它不能被5整除,除数应该小于127/5大约25,而不是7。那么,我们该在哪里停下来?

结论:除数将小于math.sqrt(N)

方法2

如果你不能理解也不用担心,别管它。如果那你不是一个研究人员就没关系。

function isPrime(n)

{

var pisor= 3,

limit= Math.sqrt(n);

//check simple cases

if(n== 2|| n== 3)

return true;

if(n% 2== 0)

return false;

while(pisor<= limit)

{

if(n% pisor== 0)

return false;

else

pisor+= 2;

}

return true;

}

isPrime(137);//= true

isPrime(237);//= false素数因子

Q:如何求出一个数的所有素数因子?

A:执行一个while循环。开始除以2,如果不能整除,记录这个除数,直到完成。

function primeFactors(n){

var factors= [],

pisor= 2;

while(n>2){

if(n% pisor== 0){

factors.push(pisor);

n= n/ pisor;

}

else{

pisor++;

}

}

return factors;

}

primeFactors(69);//= [3, 23]Q:运行时间复杂度是多少?你能做得更好吗?

A:O(n)。可以将除数从3开始,累加2。因为,如果一个数被任何偶数整除,它将被2整除。因此,你不需要除以偶数。此外,你不会有一个大于其价值一半的因素。如果你想让它变得复杂,那就用第一题的补充概念吧。

Fibonacci(斐波那契)

Q:如何获得第n个斐波纳契数字?

A:我创建一个数组并从迭代开始。

斐波那契系列是面向初学者的最受欢迎的面试问题之一。所以,你必须学习这一个。

方法1

function fibonacci(n){

var fibo= [0, 1];

if(n<= 2) return 1;

for(var i= 2; i<=n; i++){

fibo[i]= fibo[i-1]+fibo[i-2];

}

return fibo[n];

}

fibonacci(12);//= 144Q:运行时间复杂度是多少?

A: O(n);

Q:你能让它递归吗?

方法2

function fibonacci(n){

if(n<=1){

return n;

} else{

return fibonacci(n-1)+ fibonacci(n-2);

}

}

fibonacci(12);//= 144Q:运行时间复杂度是多少?

A: O(2n);关于时间复杂度的细节

最大公约数

Q:你会如何找到两个数字的最大公约数?

function greatestCommonpisor(a, b){

var pisor= 2,

greatestpisor= 1;

//if u pass a-ve number this will not work. fix it dude!!

if(a< 2|| b< 2)

return 1;

while(a>= pisor&& b>= pisor){

if(a%pisor== 0&& b% pisor==0){

greatestpisor= pisor;

}

pisor++;

}

return greatestpisor;

}

greatestCommonpisor(14, 21);// 7

greatestCommonpisor(69, 169);//= 1算法范式

很抱歉。我也无法解释它。因为我自己80%的情况下都不能理解它。我的算法分析教练告诉我这个,又从课堂笔记偷走(我是一个好学生,顺便说一句!)

function greatestCommonpisor(a, b){

if(b== 0)

return a;

else

return greatestCommonpisor(b, a%b);

}注意:用你的大脑来理解它。

去重

Q:你将如何从数组中删除重复的成员?

A:执行一个循环,并保存一个对象/关联数组。如果我第一次找到一个元素,我会设置它的值为真(这将告诉我元素添加一次)。如果我在对象中找到这个元素,我不会将它插入到返回数组中。

function removeDuplicate(arr){

var exists={},

outArr= [],

elm;

for(var i=0; i<arr.length; i++){

elm= arr[i];

if(!exists[elm]){

outArr.push(elm);

exists[elm]= true;

}

}

return outArr;

}

removeDuplicate([1,3,3,3,1,5,6,7,8,1]);//= [1, 3, 5, 6, 7, 8]合并两个排序的数组

Q:怎样合并两个已排序数组?

A:我将为每个数组保留一个指针(看代码,并注意这个)。

function mergeSortedArray(a, b){

var merged= [],

aElm= a[0],

bElm= b[0],

i= 1,

j= 1;

if(a.length==0)

return b;

if(b.length==0)

return a;

/*

if aElm or bElm exists we will insert to merged array

(will go inside while loop)

to insert: aElm exists and bElm doesn't exists

or both exists and aElm< bElm

this is the critical part of the example

*/

while(aElm|| bElm){

if((aElm&&!bElm)|| aElm< bElm){

merged.push(aElm);

aElm= a[i++];

}

else{

merged.push(bElm);

bElm= b[j++];

}

}

return merged;

}

mergeSortedArray([2,5,6,9], [1,2,3,29]);//= [1, 2, 2, 3, 5, 6, 9, 29]不通过临时变量交换两个数的值

Q:如何在不使用临时变量的情况下交换两个数字?

function swapNumb(a, b){

console.log('before swap:','a:', a,'b:', b);

b= b-a;

a= a+ b;

b= a-b;

console.log('after swap:','a:', a,'b:', b);

}

swapNumb(2, 3);

//= before swap: a: 2 b: 3

//= after swap: a: 3 b: 2位操作:对不起,我无法向你解释这一点。 Kinjal Dave建议到 logical conjunction理解它。将浪费您30分钟。

function swapNumb(a, b){

console.log("a:"+ a+" and b:"+ b);

a= a ^ b;

b= a ^ b;

a= a ^ b;

console.log("a:"+ a+" and b:"+ b);

}

swapNumb(2, 3);

//= a: 2 and b: 3

//= a: 3 and b: 2字符串反向

Q:如何在JavaScript中反转字符串?

A:可以遍历字符串并将字母连接到新字符串。

方法1

function reverse(str){

var rtnStr='';

for(var i= str.length-1; i>=0;i--){

rtnStr+=str[i];

}

return rtnStr;

}

reverse('you are a nice dude');

//="edud ecin a era uoy"Q:你知道在现代浏览器中串联效果很好,但在像IE8这样的旧浏览器中会变慢。还有什么不同的方法,可以扭转一个字符串?

A:当然.我可以使用数组,也可以添加一些检查。如果字符串是NULL或其他字符串,这将失败。让我也做一些类型检查。使用此数组类似于在某些服务器端语言中使用字符串缓冲区。

方法2

function reverse(str){

var rtnStr= [];

if(!str|| typeof str!='string'|| str.length< 2) return str;

for(var i= str.length-1; i>=0;i--){

rtnStr.push(str[i]);

}

return rtnStr.join('');

}Q:运行时间复杂度是多少?

A: O(n);

Q:可以做得更好?

A:我可以遍历索引的一半,它会节省一点点。(这是没用的,可能不会打动面试官)

方法3

function reverse(str){

str= str.split('');

var len= str.length,

halfIndex= Math.floor(len/ 2)- 1,

revStr;

for(var i= 0; i<= halfIndex; i++){

revStr= str[len- i- 1];

str[len- i- 1]= str[i];

str[i]= revStr;

}

return str.join('');

}Q:这有效,但你可以做递归的方式吗?

A:可以。

方法4

function reverse(str){

if(str===""){

return"";

} else{

return reverse(str.substr(1))+ str.charAt(0);

}

}方法5

Q:你可以在方法中使用任何构建,使它更清洁吗?

function reverse(str){

if(!str|| str.length<2) return str;

return str.split('').reverse().join('');

}方法6

Q:你可以做反向函数作为字符串扩展吗?

A:我需要将这个函数添加到String.prototype,而不是使用str作为参数,我需要使用this

String.prototype.reverse= function(){

if(!this|| this.length<2) return this;

return this.split('').reverse().join('');

}

'abc'.reverse();

//='cba'单词反转

Q:你如何在句子中颠倒单词?

A:您必须检查整个字符串的空白区域。确定是否可能有多个空格。

//have a tailing white space

//fix this later

//now i m sleepy

function reverseWords(str){

var rev= [],

wordLen= 0;

for(var i= str.length-1; i>=0; i--){

if(str[i]==''|| i==0){

rev.push(str.substr(i,wordLen+1));

wordLen= 0;

}

else

wordLen++;

}

return rev.join('');

}内置方法的快速解决方案:

function reverseWords(str){

return str.split('').reverse();

}原位反转

Q:如果你有一个字符串如”I am the good boy”,怎样变为“I ma eht doog yob”?注意这些单词位置不变但是被反转了。

A:要做到这一点,我必须做字符串反向和字反转。

function reverseInPlace(str){

return str.split('').reverse().join('').split('').reverse().join('');

}

reverseInPlace('I am the good boy');//="I ma eht doog yob"Q: ok。好的,你能不使用内置反向函数做到吗?

A:(内心独白)有没有搞错!!

//sum two methods.

//you can simply split words by''

//and for each words, call reverse function

//put reverse in a separate function

//if u cant do this,

//have a glass of water, and sleep第一个非重复字符

Q:怎么在字符串中找到第一个非重复字符?

A:有什么条件吗?

A:比如是否区分大小写?

面试官可能会说No。

A:是长字符串还是短字符串?

Q:这些有什么关系吗?

A:例如,如果它是一个非常长的字符串,说一百万个字符,我想检查是否有26个英文字符正在重复。我可能会检查是否所有字符都在每200个字母中重复(例如),而不是循环遍历整个字符串。这将节省计算时间。

Q:简单起见,这个字符串是“the quick brown fox jumps then quickly blow air”。

function firstNonRepeatChar(str){

var len= str.length,

char,

charCount={};

for(var i=0; i<len; i++){

char= str[i];

if(charCount[char]){

charCount[char]++;

}

else

charCount[char]= 1;

}

for(var j in charCount){

if(charCount[j]==1)

return j;

}

}

firstNonRepeatChar('the quick brown fox jumps then quickly blow air');//="f"这有一个问题,不能再循环中及时退出。

删除重复的字符

Q:怎样删除字符串中的重复字符?

A:这与第一个非重复字符非常相似。你应该问一些类似的问题。它是区分大小写的吗?。

如果面试官说,这是区分大小写的,那么你就很轻松了。如果他说不。你可以使用string.toLowercase()来把字符串。面试官可能不喜欢这个方法。因为返回字符串不会拥有相同的大小写。所以

function removeDuplicateChar(str){

var len= str.length,

char,

charCount={},

newStr= [];

for(var i=0; i<len; i++){

char= str[i];

if(charCount[char]){

charCount[char]++;

}

else

charCount[char]= 1;

}

for(var j in charCount){

if(charCount[j]==1)

newStr.push(j);

}

return newStr.join('');

}

removeDuplicateChar('Learn more javascript dude');//="Lnmojvsciptu"回文检查

Q:如何检查一个字符串是否是回文?

A:把字符串反转,如果反转前后相等,那么它就是回文。

function isPalindrome(str){

var i, len= str.length;

for(i=0; i<len/2; i++){

if(str[i]!== str[len-1-i])

return false;

}

return true;

}

isPalindrome('madam')

//= true

isPalindrome('toyota')

//= false或者

function checkPalindrom(str){

return str== str.split('').reverse().join('');

}类似的:在 O(n)时间复杂度内判断一个字符串是否包含在回文字符串内。你能在O(1)时间解决问题吗?

找缺失的数字

Q:在一个1到100的未排序数组中找到缺失的数,你怎么做?

说明:数组中的数字为1到100。数组中只有一个数字缺

好了,文章到这里就结束啦,如果本次分享的js数组方法有哪些和js数组去重问题对您有所帮助,还望关注下本站哦!

aippt免费吗?百度ai生成ppt免费吗php框架手册?php ci框架手册