数组
添加元素
在数组末尾插入元素
- 把值赋值给最后一个空位上的元素
let nums = [1,2,3];
nums[nums.length] = 4;
console.log('nums', nums)
- 使用push
let nums = [1,2,3];
nums.push(1,2,3)
在js中,数组是一个可以修改的对象。如果添加元素,就会动态增长。在c和java等其他语言中,想添加元素就要创建一个全新的数组,不能简单的添加所需元素
在数组开头插入元素
首选要腾出数组中第一个元素的位置,把所有元素位置向右移动一位,然后循环,将对应的前一个元素(i-1)赋值给(i),最后把我们想要的值赋值给第一个位置
Array.prototype.insertFirstPosition = function (value) {
for (let k = this.length; k > 0; k--) {
this[k] = this[k - 1];
}
this[0] = value;
};
let nums = [1, 2, 3];
nums.insertFirstPosition(-2);
console.log('nums', nums); // [ -2, 1, 2, 3 ]
使用unshift
let nums = [1, 2, 3];
nums.unshift(-2);
console.log('nums', nums); // [ -2, 1, 2, 3 ]
删除元素
从数组末尾删除元素
- 利用length属性
let nums = [1, 2, 3];
nums.length = nums.length - 1;
console.log('nums', nums); // [ 1, 2 ]
- 利用pop
let nums = [1, 2, 3];
nums.pop();
console.log('nums', nums); // [ 1, 2 ]
- 利用splice
let nums = [1, 2, 3];
nums.splice(-1, 1);
console.log('nums', nums); // [ 1, 2 ]
从数组开头删除元素
- 将数组所有元素左移一位
let nums = [1, 2, 3];
Array.prototype.removeFirstPosition = function () {
for (let k = 0; k < this.length; k++) {
this[k] = this[k + 1];
}
};
nums.removeFirstPosition();
console.log('nums', nums); // [ 2, 3, undefined ]
会出现一个问题,元素左移,只是把元素的第一位的值,用第二位覆盖了,并没有将第一个元素删除。导致,最后一位会出现undefined ,并且长度没有发生变化,那么需要实现一个真正删除元素的方法
真正移除这个元素,我们要创建一个新的元素,将所有不是undefined的值,从原来的数组,复制到新的数组中
let nums = [1, 2, 3];
Array.prototype.reIndex = function () {
const newArray = [];
for (let k = 0; k < this.length; k++) {
if (this[k] !== undefined) {
newArray.push(this[k]);
}
}
return newArray;
};
Array.prototype.removeFirstPosition = function () {
for (let k = 0; k < this.length; k++) {
this[k] = this[k + 1];
}
return this.reIndex(this);
};
const remove = nums.removeFirstPosition();
console.log('remove', remove); // [ 2, 3 ]
去掉undefined 也可以使用filter简化
Array.prototype.reIndex = function () {
return this.filter((v) => v);
};
- 使用shift
let nums = [1, 2, 3];
nums.shift();
console.log('nums', nums); // [ 2, 3 ]
在任意位置添加或者删除元素
splice
- 第一个参数表示要删除或插入的元素的索引值
- 第二个参数是删除元素的个数
- 第三个参数往后,就是要添加到数组的元素
数组合并
- concat
let zero = 0;
let arr1 = [1, 2];
let arr2 = [2, 3, 4, 5];
let num = arr2.concat(zero, arr1);
console.log('num', num);
搜索相关
let arr = [
{
name: '张三',
score: 40,
},
{
name: '李四',
score: 60,
},
{
name: '张三0',
score: 70,
},
{
name: '张三1',
score: 90,
},
{
name: '张三2',
score: 100,
},
{
name: '张三3',
score: 100,
},
];
// 1. 全班同学是不是都及格了
let jige = arr.every((v) => v.score >= 60);
console.log('jige', jige);
// 2. 全班同学的及格率
let jigecount = arr.filter((v) => v.score >= 60);
console.log('jigecount', jigecount.length / arr.length);
// 3. 没有及格的同学的名字都有哪些
let meijige = arr.filter((v) => v.score < 60).map((n) => n.name);
console.log('meijige', meijige);
// 4. 有没有满分的同学
let manfen = arr.some((v) => v.score == 100);
console.log('manfen', manfen);
// 5. 有满分的话,这个同学叫什么
let manName = arr.find((v) => v.score === 100).name;
console.log('manName', manName);
// let manName = arr.filter((v) => v.score === 100).map((n) => n.name);
// console.log('manName', manName);
// 6. 找到李四的分数
let li = arr.find((v) => v.name == '李四').score;
console.log('li', li);
// 7. 想给每一项增加一个check属性
let ch = arr.map((item) => {
item.check = false;
return item;
});
console.log('ch', ch);
给数组每一项添加一个字段
taskList = list.map((item) => {
return {
...item,
isEding: false,
};
});
根据特定的字符截取数据
let pimg = 'https://mer-media1.52ritao.cn/item/detail/orig/photos/m20648829566_1.jpg?1675644078?size=100*100&from="other"'
pimg.indexOf('?') > 0 ? pimg.substr(0,pimg.indexOf('?')) : pimg
过滤出没有某个字段的数据
const filterNoRefusedData = () => {
return packageTips.value.filter(
(item) => !item.hasOwnProperty('partRefundAmount')
);
};