首页 > 编程语言 >JavaScript数组相关操作方法以及数组扩展与修复

JavaScript数组相关操作方法以及数组扩展与修复

时间:2022-10-27 20:39:53浏览次数:56  
标签:返回 arr 元素 console log 操作方法 JavaScript 数组


JavaScript一些常用的操作方法

join()

将数组中所有元素转化为字符串并连接一起,返回最后生成的字符串。可以指定分隔符;

        var arr = [23,56,78,0,98,190];
console.log(arr.join(""));//235678098190
console.log(arr.join("@ "));//23@ 56@ 78@ 0@ 98@ 190

reverse()

把数组的元素颠倒顺序,返回逆序数组;

        console.log(arr.reverse());//[190, 98, 0, 78, 56, 23]

sort()

把数组中元素默认成字符串进行比较排序返回排序后的数组(一般是按照正序排序),也可以自定义排序的方式

        arr.sort(function(a,b){return a-b;});
console.log(arr)

concat()

连接两个数组,若concat()参数是数组,则连接的是该数组的元素,并非是数组本身,concat()不会递归扁平化数组的数组(就是只拆开最外层数组),也不会修改调用的数组。

        var arr1 = [12,34,56,78,82]
console.log(arr.concat(arr1));

slice()

切片操作,返回指定数组的一个片段或者子数组,接受两个参数,分别表示片段的起始和结束位置。若只有一个参数,则表示从起始位置到结尾的所有数组元素;若参数是负数,则表示相对于数组中最后一个元素的位置。

       console.log(arr.slice(2,6));//[78,0,98,190]

splice()

Array.splice()是在数组中插入或者删除元素。第一个参数表示指定插入或(或)删除的起始位置。第二个参数表示从数组中删除的个数,若省略,则删除从起始位置到结尾的所有元素。

       console.log(arr.splice(2,4,2019));//[78, 0, 98, 190]
console.log(arr); //[23,56,2019]

Array.splice()返回一个由被删除的元素组成的数组,若没有删除数组元素,则返回一个空数组。前两个参数指定了要删除的数组元素。其他参数则是需要插入数组中的元素,若这些参数中含有数组,直接插入数组本身并非数组元素。

push()和pop()

把数组当成栈来使用。

push()方法在数组的尾部添加元素,并且返回数组的新长度

pop()方法删除数组的最后一个元素,减小数组长度,并且返回被删除的元素。

unshift()和shift()

unshift():入队操作,向数组的头部添加元素,返回数组新的长度

shift():出队操作,就是删除数组的第一个元素,并且将其返回

toString()和toLocaleString()

toString()把数组元素转化为字符串

toLocaleString()把数组元素转化为本地化的字符串。

ECMAScript5中的数组方法

forEach()

从头到尾遍历数组,为每个元素调用指定的函数。forEach不能像for循环中使用break语句实现提前终止。需要把forEach方法放置在try块中,并抛出一个异常,抛出异常时就会提前终止。

function foreach(a,f,t){
try {
a.forEach(f,t)
} catch (error) {
if (error === foreach.break) {
return
else{
throw error
}
}
}
foreach.break = new Error("提前终止")

map()

把数组的每一个元素传递给指定的函数,并且返回一个新数组(包含该函数的返回值)。即是针对数组的每一个参数进行操作。

       arr.map(item=>{
console.log(item/2);
})

fliter()

返回的数组是调用数组的一个子集,传递数组是用来做逻辑判断的。

       console.log(arr.filter((args)=>{
return args % 2 == 0
}));//[56, 78, 0, 98, 190]

every() 和 some()

every()和some()方法是数组的逻辑判断:针对数组元素应用指定的函数进行判断,返回true或者false。注意,一旦every()和some()确认该返回什么值它们就会停止遍历数组元素。

some方法中,只要数组中有一个元素满足条件,就返回true,立即停止遍历数组;

       console.log(arr.some((args)=>{
return args % 2 == 0
}));//true

every方法中,需要每一个元素都满足条件才能返回true。必须遍历全部的数组。

       console.log(arr.every((args)=>{
return args % 2 == 0
}));//false

reduce() 和 reduceRight()

将数组元素进行组合,生成单个值。reduce()需要两个参数,第一个参数是执行操作函数,第二个参数(可选)是一个传递给函数的初始值。

console.log(arr.reduce(function(a,b){return a+b}));//445

reduceRight()与reduce()相似,只是从右到左的进行处理。

indexOf() 和lastIndexOf()

indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1。indexOf()从头至尾搜索,而lastIndexOf()则反向搜索。

console.log(arr.indexOf(0));//445

兼容ie678

Array.prototype.indexOf = function(item,index){
var n = this.length,i = ~~index;
if(i<0)i +=n;
for(;i<n;i++){
if(this[i]===item){return i;}
}

return -1;
}


console.log(arr.indexOf(0));//445

Array.prototype.lastIndexOf = function(item,index){
var n = this.length,
i = index == null ? n-1:index;
if(i<0) i = Math.max(0,n+i);

for(;i>=0;i--){
if (this[i] === item) {
return i;
}
}

return -1;

}

ES6给了Array添加了@@iterator属性

需要通过Symbol.iterator进行访问,返回一个包含数组键值对的迭代器对象,通过同步调用得到数组元素的键值对。不断调用next方法便可依次得到数组中的值。

        var num =  [0, 2, 4, 6, 8, 10, 12, 14, 16];
var iterator = nums[Symbol.iterator]();
console.log(iterator.next().value);//0
console.log(iterator.next().value);//2

entries

返回包含数组所有键值对的@@iterator

includes

若数组中存在某个元素,则返回true,否则返回false,第一个参数是要查寻的元素,第二个参数是开始查询的索引位置。

        console.log(num.includes(10, 0));//true

copyWithin

复制数组中一系列的元素到同一个数组指定的起始位置

        //copyWithin,第一个参数是被复制元素放置的起始位置,第二参数是需要复制的元素的起始位置
var arrCopy = num.copyWithin(7, 3, 5);
console.log(arrCopy); //[0, 2, 4, 6, 8, 10, 12, 6, 8]

find

根据回调函数中的条件从数组中查找元素,若是找到该元素,就返回该元素(返回的是第一个满足条件的值)。

findIndex

根据回调函数中的条件从数组中查找元素,若是找到该元素,就返回该元素的索引(返回的是第一个满足条件的值)。

        function arr12(element) {
return (element % 12 != 0) ? true : false;
}
console.log(num.find(arr12));//10
console.log(num.findIndex(arr12));//1

fill

使用静态值填充数组

        //第一个参数表示要填充的静态值,第二个参数是被填充数组的起始位位置,第三个参数是被填充的末尾位置
arrItem.fill(9, 2);
console.log(arrItem); //[9, 9, 9, 9, 9, 9, 9]

from

根据已有的数组,创建一个新数组

        var newNum = Array.from(num);
console.log(newNum); //[0, 2, 4, 6, 8, 10, 12, 14, 16]

keys

返回包含数组所有索引的@@iterator

        var _keys = num.keys();
console.log(_keys.next());//{value: 0, done: false}
console.log(_keys.next());//{value: 1, done: false}
console.log(_keys.next());//{value: 2, done: false}

of

根据传入的参数创建新数组

        var arrItem = Array.of(1, 2, 3, 5, 4, 6, 9);
console.log(arrItem); //[1, 2, 3, 5, 4, 6, 9]

实现原理:

    function ArrayOf() {
return [].slice.call(arguments)
}
var arr = ArrayOf(1, 2, 3, 5);
console.log(arr); //[1,2,3,5]

values

返回包含数组所有值的@@iterator

        var _values = num.values();
console.log(_values.next()); //{value: 0, done: false}
console.log(_values.next());//{value: 2, done: false}


标签:返回,arr,元素,console,log,操作方法,JavaScript,数组
From: https://blog.51cto.com/u_12344418/5801914

相关文章

  • JavaScript设计模式-行为设计模式
    行为设计模式用于不同对象之间职责划分、算法抽象,包含:模板方法模式、观察者模式、状态模式、策略模式、职责链模式、命令模式、访问者模式、中介模式、备忘录模式、迭代器模......
  • JavaScript设计模式-结构型设计模式
    结构型设计模式关注如何把类或者对象组合成为更大、更复杂的结构,简化设计。包含:外观模式、适配器模式、代理模式、装饰者模式、桥接模式、组合模式、享元模式外观模式(套餐服......
  • JavaScript中的
    "=="和"==="运算符使用于比较两个值是否相等。都允许任意类型的操作数,若操作数相等则返回true,否则返回false。"===":严格相等运算符(恒等运算符),用来检测两个操作数是......
  • JavaScript中易忘的运算符
    eval()JavaScript通过全局函数eval()可以解释运行由JavaScript源码组成的字符串并且产生一个值。eval("25*4");//==100eval()是一个原本是一个函数,但是已经被当成运算符来......
  • 反证法证明, 抓住定义的意义,不惧Corner case, 抓住循环不变量 | 代码随想录算法训练
    目录977.有序数组的平方算法的正确性采用反证法证明思路解题方法Code209.长度最小的子数组思维打开,抓住滑动窗口定义本质与意义,笑对CornerCases59.螺旋矩阵II......
  • JavaScript函数进阶
    JavaScript中函数是第一类对象。函数与对象共存,函数也可以被视为其他人一类型的JavaScript对象。函数能被变量引用、能以字面量形式声名,甚至可以作为函数参数进行传递。Java......
  • JavaScript数组的push()等方法的使用
        数组是值得有序集合。每个值在数组中有一个位置,用数字表示,叫做索引。JavaScript数组是无类型的:数组元素可以是任何类型,而且同一个数组中可以存在不同类型元素,甚......
  • 稀疏数组
    publicclassarray1{publicstaticvoidmain(String[]args){intarray[][]=newint[11][11];array[3][4]=10;array[6][8]=12;......
  • 三维数组递归取对象
    原数组:arr=[{name:'北京',id:110000,childList:[{name:'北京',id:110001,childList:[{name:'东城',id:110101},{name:'西城',id:110102}]}]......
  • 力扣(leetcode) 88. 合并两个有序数组(双指针法)(库函数法)
    题目分析:这道题给的题目挺恶心的。就是将两个有序数组合并成一个有序数组。但是他给的数组是这样的:nums1=[1,2,3,0,0,0]这里实际上就是:nums1=[1,2,3]。后面的0只起......