总结了一些比较常用的方法,不全,仅供参考。
splice(index,len,item):是vue中数组变异的方法之一,可以用来删除,更新,和增加数组内容,会改变原数组。
参数名 | 描述 |
---|---|
index | 数组下标 |
len | 为1或0 |
item | 新增或修改的内容 |
类型 | 描述 |
---|---|
删除:splice(index,1) | 删除下标为index的内容 |
更新:splice(index,1,item) | 用新的值item更新替换掉下标为index的值 |
新增:splice(index,0,item) | 在下标为index的位置增加一项值为item |
<template>
<div>
<a-button type="primary" @click="add(1, { name: '马七', age: 24 })">添加</a-button>
<a-button @click="update(2, { name: '牛八', age: 25 })">修改</a-button>
<a-button type="dashed" @click="deleteitem(1)">删除</a-button>
<ul>
<li v-for="item in items" :key="item.name">
<p>{{ item.name }}:{{ item.age }}</p>
</li>
</ul>
</div>
</template>
<script>
import { defineComponent } from 'vue';
export default defineComponent({
data() {
return {
val: '',
items: [
{ name: '张三', age: '20' },
{ name: '李四', age: '21' },
{ name: '王五', age: '22' },
{ name: '赵六', age: '23' },
],
};
},
methods: {
deleteitem(index) {
this.items.splice(index, 1);
//结果
//张三:20
//马七:24
//李四:21
//王五:22
//赵六:23
},
update(index, item) {
this.items.splice(index, 1, item);
//结果
//张三:20
//马七:24
//牛八:25
//王五:22
//赵六:23
},
add(index, item) {
this.items.splice(index, 0, item);
//结果
//张三:20
//牛八:25
//王五:22
//赵六:23
},
},
});
</script>
slice(startIndex,endIndex) :可以截取数组和字符串,左闭右开,不会影响原数组。
参数名 | 描述 |
---|---|
startIndex | 截取开始位置的索引,包含开始索引 |
endIndex | 截取结束位置的索引,不包含结束索引,该参数可以省略不写,此时会截取从开始索引往后的所有元素。也可以传递负值,-1即为倒数第一个 |
let arr1 =[1,2,3,4];
let arr2 =arr1.slice(2,3);
console.log(arr2);//[3] //从从第二位开始,截取到第三位
console.log(arr1);//[1,2,3,4]// 原数组不发生变化
split(' '):是分裂的意思,也就是把一个字符串分割成字符串数组。
split(' '):会把数据拆分为一个数组,括号里的' '是把数据拆分为每个字符串的意思,如果不用就不会拆分成每个字符串
var data="Not split";
console.log(message.split(' '));
结果:[ "N", "o", "t", " ", "s", "p", "l", "i", "t" ]
pop():从后面删除元素, 只能是一个, 返回值是删除的元素,改变原数组;
let arr = [1,2,3,4,5]
console.log(arr.pop())
// 5
console.log(arr)
//[1,2,3,4]
shift():从前面删除元素, 只能删除一个, 返回值是删除的元素,改变原数组;
let arr = [1,2,3,4,5]
console.log(arr.shift())
// 1
console.log(arr)
// [2,3,4,5]
unshift():从前面添加元素, 返回值是添加完后的数组的长度,改变原数组;
let arr = [1,2,3,4,5]
console.log(arr.unshift(2))
// 6
console.log(arr)
//[2,1,2,3,4,5]
delete() :删除掉数组元素后,会把该下标处的值置为undefined,数组的长度不会变。
let arr = [1,2,3,4,5]
console.log(delete arr[1])
//[2,,2,3,4,5]
concat():连接两个数组,返回值为连接后的新数组,不改变原数组。
var array_1 = ['reese','root','fusco'];
var array_2 = ['finch','shaw','bear'].concat(array_1);
consol.log(array_2);
//["finch", "shaw", "bear", "reese", "root", "fusco"]
sort():将数组进行排序,返回值是排好的数组,默认是按照最左边的数字进行排序。
let arr = [2,10,6,1,4,22,3]
console.log(arr.sort())
// [1, 10, 2, 22, 3, 4, 6]
let arr1 = arr.sort((a, b) =>a - b)
console.log(arr1)
// [1, 2, 3, 4, 6, 10, 22]
let arr2 = arr.sort((a, b) =>b-a)
console.log(arr2)
// [22, 10, 6, 4, 3, 2, 1]
reverse( ):是翻转的意思,把数据反过来。只会对数组产生作用,改变原数组。
let arr = [1,2,3,4,5]
console.log(arr.reverse())
// [5,4,3,2,1]
console.log(arr)
// [5,4,3,2,1]
join() :方法用于把数组中的所有元素放入一个字符串,可搭配split('')使用。
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false
const a = ['a12', 'a23', 'a33', 'a34']
const b = ['a12', 'a23', 'a34']
let c = a.filter(item =>{
return !b.includes(item)
})
console.log(c);
includes() :方法用来判断一个数组中是否有这一项,返回此项的索引值.没有返回 -1
const a = ['12', '23', '33', '34']
const b = ['12','23', '34']
let c = a.filter(item =>{
return b.indexOf(item) === -1
})
console.log(c);
如果数组中有NaN. 则 indexOf无法匹配到. 而includes可以匹配到
map():函数定义在JS的array中,它返回一个新的数组,数组中的元素为原生数据用函数处理后的值,不会对空数组进行检测,不会改变原始数组。
let temp=[];
that.caseTagsList.map(item=>{
if(that.execParams.tagIdList.indexOf(item.id) < 0){
temp.push(item);
}
});
[ //data的数据
{"time":"09:00-12:00","Id":"1"},
{"time":"13:00-16:00","Id":"2"},
{"time":"18:00-20:00","Id":"3"}
]
let time = data.map(item =>(item.time))
console.log(time)
//控制台输出如下
//['09:00-12:00', '13:00-16:00', '18:00-20:00']
[ //data的数据
{"time":"09:00-12:00","Id":"1"},
{"time":"13:00-16:00","Id":"2"},
{"time":"18:00-20:00","Id":"3"}
]
//只需一行map()
let resion = data.map(item =>({name: item.Id}))
console.log(resion)
//控制台输出
//[{ name: '1' }, { name: '2' }, { name: '3' }]
find():用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
find():回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。
//举例
//定义一个数组,有两条数据
companyOptions: [
{
label: '饿了么',
value: 0,
},
{
label: '美团',
value: 1,
},
]
//需要找到value为1,label为美团的数组
let obj=this.companyOptions.find(item=>item.value===1)
findIndex():用法与find()非常类似,返回第一个符合条件的数组成员位置,如果所有成员都不符合条件,则返回-1。
let items = [1, 2, 3, 4, 5, 6, 7, 8, 9];
items.findIndex((n) => n > 5)
//返回符合条件的值的位置(索引)
// 5
const fruits = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
const index = fruits.findIndex(fruit => fruit.name === 'cherries');
console.log(index); // 3
console.log(fruits[index]);
find()和findIndex()都可以发现NaN,弥补了数组的IndexOf()的不足。
let item = [NaN]
item.indexOf(NaN)
// -1
item.findIndex(y => Object.is(NaN, y))
// 0
indexOf()无法识别数组的NaN成员,但是findIndex()可以借助Object.is方法做到。
filter()使用指定的函数测试所有元素,并创建一个包含所有通过测试元素的新数组。
filter() 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或 等价于 true 的值元素创建一个新数组。那些没有通过 callback 测试的元素会被跳过,不会被包含在新数组中。filter() 不会改变原数组。
var arr = [10, 20, 30, 40, 50]
var newArr = arr.filter(item => item > 30);
console.log(newArr);
//[40, 50]
遍历数组全部元素,利用回调函数对数组进行操作,自动遍历整个数组,且无法break中途跳出循环,不可控,不支持return操作,return只用于控制循环是否跳出当前循环。
回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身。
var arr = [1,2,3,4,5,] ;
arr.forEach(function(item,index){
console.log(item);
});
//该方法无返回值,仅仅是遍历数组中的每一项,不对原来数组进行修改,可以自己通过数组索引来修改原来的数组;
var ary = [12,23,24,42,1];
var res = ary.forEach(function (item,index,input) {
input[index] = item*10;
})
console.log(res);
//--> undefined;
console.log(ary);
//--> 通过数组索引改变了原数组;
判断数组中是否每个元素都满足条件,只有都满足条件才返回true,只要有一个不满足就返回false;
// 判断数组arr1是否全是偶数
var arr1=[1, 2, 3, 4, 5];
var arr2=[1, 4, 6, 8, 10];
console.log(
arr1.every(function(value, index, array){
return value % 2 == 0;
})
);
// false
判断数组中是否每个元素都满足条件,只要有一个满足条件就返回true,都不满足就返回false;
// 判断数组arr2是否至少有一个偶数
var arr1=[1, 2, 3, 4, 5];
var arr2=[1, 4, 6, 8, 10];
console.log(
arr2.some(function(value, index, array){
return value % 2 == 0;
})
);
// true
array.reduce(callback, initialValue)接收一个函数作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值.
参数名 | 描述 |
---|---|
previousValue | 上一次调用回调返回的值,或者是提供的初始值(initialValue); |
currentValue | 数组中当前被处理的元素; |
index | 当前元素在数组中的索引; |
array | 调用reduce 的数组; |
// 获取购物车中商品列表的价格总和
let goodList = [
{id: 1, price: 10, qty: 5},
{id: 2, price: 15, qty: 2},
{id: 3, price: 20, qty: 1}
]
let totalPrice = goodList.reduce((prev, cur) => {
return prev + cur.price * cur.qty
}, 0)
console.log(totalPrice)
// 100
var arrString = 'abcdaabc'
// 获取字符中中每个字母出现的次数
let count = arrString.split('').reduce(function(res, cur) {
res[cur] ? res[cur]++ : res[cur] = 1
return res
}, {})
console.log(count)
// {a: 3, b: 2, c: 2, d: 1}
set() 函数中会先调用对象的hash() 方法,获取 hash 结果,如果 hash 结果相同,用比较操作符 =(也就是调用函数 eq())判断二者的值是否相等,如果都相等,去重;否则,set() 认为二者不同,两个都保留到结果中。
这个是目前最简单的去重方法,但是这个方法不支持对象方法,可以支持一些简单的数据格式去重。
let arr = [a,b,c,c,d];
let set = new Set(arr);
let newArr = Array.from(set);
最后得出结果newArr=[a,b,c,d]
名称 | 描述 |
---|---|
Object.preventExtensions() | 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。 |
Object.isExtensible() | 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。 |
Object.seal() | 方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。 |
Object.is(value1, value2); | 方法判断两个值是否为同一个值。 |
Object.entries() | 返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。 |
Object.keys() | 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。 |
Object.assign() | 用于对象的合并,将源对象的所有可枚举属性,复制到目标对象,简单来说就是可以将两个对象中不同的属性进行合并。(注意为浅拷贝) |
(...)运算符 | 用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 |
console.log(Object.is(NaN,NaN))
//true
console.log(Object.is(+0, -0))
//false
//数组
var arr = [1, 2, 6, 20, 1];
console.log(Object.keys(arr), "arr")
//["0", "1", "2", "3", "4"] "arr"
//返回的数组元素的下标集合
//对象
var obj = {
"name": 'lily',
"age": '18',
"work": 'student'
};
console.log(Object.keys(obj));
// ["name", "age", "work"]
// 返回对象的属性名,即键名;
如果目标对象中有和源对象同名的属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性:
如果源对象中只有一个参数那么assign()会直接返回这个参数,如果遇到这个参数不是对象,assign()会先将这个参数转换成为对象,然后返回。
由于undefined和null无法转成对象,所以如果它们作为目标对象参数,就会报错。所以我们在选择目标对象的时候要尽量避开undefined和null。
const object1 = {
a: 1,
b: 2,
c: 3
};
const object2 = Object.assign({
c: 4,
d: 5
}, object1);
console.log(object2, "-", object1);
//{c: 3, d: 5, a: 1, b: 2} - {a: 1, b: 2, c: 3}
//源对象跟目标对象有相同的属性时,以源对象为准;
//源对象越越靠后,权重级越大,越以谁为准,object3在最后,所以属性c的值,以object3为准,为9;
const object1 = {
a: 1,
b: 2,
c: 3
};
const object3 = {
c: 9
};
const object2 = Object.assign({
c: 4,
d: 5
}, object1, object3);
console.log(object2); //{c: 9, d: 5, a: 1, b: 2}
//一 将字符串转化为数组
const str = 'asdasd';
let arr1 = [...str];
console.log(arr1); //['a','s','d','a','s','d']
//二 可用于传递多个的参数,且将参数合并成数组
function funmerge(...prompt) {
console.log(prompt);
//[1,2,1,4,4,5]
}
funmerge(1, 2, 1, 4, 4, 5);
//三 脱衣服(将数组或对象里的值扩展出)
let arr2 = ['Hello', 'World'];
let arr3 = ['!!!!'];
let arr4 = [...arr2, ...arr3]; //合并数组
console.log(arr4); // ['Hello', 'World', '!!!!']
//四 复制
let bar = { a: 1, b: 2 };
let baz = { ...bar };
// { a: 1, b: 2 }
//等价于
let bar = { a: 1, b: 2 };
let baz = Object.assign({}, bar);
// { a: 1, b: 2 }