-
数组的变更方法和替换数组
转载网址:https://blog.51cto.com/zhanglida66/1921562
1.变更方法(改变原数组)
- push()
在数组的末尾添加元素,并返回新的长度
a=[1,2,3];
a.push(5,6,7)); // 6
a; // [1,2,3,5,6,7]
- pop()
从数组中把最后一个元素删掉,并返回这个元素的值
a=[1,2,3];
a.pop(); // 3
a; // [1,2]
- shift()
从数组中把第一个元素删掉,并返回这个元素的值
a=[1,2,3];
a.shift(); // 1
a; // [2,3]
- unshift()
在数组的开头添加一个或更多的元素,并返回新的长度
a=[1,2,3];
a.unshift(5,6)); // 5
a; // [5,6,1,2,3]
记忆点:shift,pop是删元素,返回的是被删元素的值;unshift,push是新增元素,返回的是新的长度。
- splice()
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。然后返回被删除的项目。
语法:
arrayObject.splice(index,howmany,item1,.....,itemX)
其中:index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。
//新增一个元素
a=['A','B','C','D','E','F']
a.splice(2,0,'addItem'); //[]
a; // ["A", "B", "addItem", "C", "D", "E", "F"]
//删除一个元素
a=['A','B','C','D','E','F']
a.splice(2,2); //["C", "D"]
a; // ["A", "B", "E", "F"]
//同时新增和删除
a=['A','B','C','D','E','F']
a.splice(2,2,'addItem1','addItem2'); //["C", "D"]
a; // ["A", "B", "addItem1", "addItem2", "E", "F"]
sort()
sort() 方法用于对数组的元素进行排序。reverse()
reverse() 方法用于颠倒数组中元素的顺序。forEach()
forEach(): 没有返回值,本质上等同于 for 循环,对每一项执行 function 函数。即map是返回一个新数组,原数组不变,forEach 是改变原数组。
tempAddressData.forEach(item => {
item.precinctName = self.removeLastUnderline(item.precinctName);
item.standardAddress = self.removeLastUnderline(item.standardAddress);
})
2.替换数组(不改变原数组,生成新数组)
-
filter()
可以用来找出数组中符合某些条件的对象数组,其中filter写了{}里面的要return,没写{}不加return
https://www.cnblogs.com/ymhweb/p/15221608.html concat()
concat() 方法用于连接两个或多个数组。返回值:返回连接后的新数组
a=['A','B','C']
a.concat('addItem1','addItem2'); //["A", "B", "C", "addItem1", "addItem2"]
a; // ['A','B','C']
- slice()
slice() 方法可从已有的数组中返回选定的元素。
a=['A','B','C','D','E','F']
a.slice(1,4); // ["B", "C", "D"]
a; // ['A','B','C','D','E','F']
- map()
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。不改变原数组。
a = [1, 2, 3, 4, 5];
a.map((item) => {
return item * item;
}); // [1, 4, 9, 16, 25]
a; // [1, 2, 3, 4, 5]
-
对象数组的比较
- 返回根据uniqueName在第二个数组中,但不在第一个数组中的元素
compareArray: function (array1, array2) {
var result = []
for (var i = 0; i < array2.length; i++) {
var obj = array2[i]
var name2 = obj.uniqueName;
var isExist = false
for (var j = 0; j < array1.length; j++) {
var aj = array1[j]
var name1 = aj.uniqueName;
if (name1 === name2) {
isExist = true;
break
}
}
if (!isExist) {
result.push(obj)
}
}
return result;
}
- 返回被修改的对象
compareModifiedArray: function (array1, array2) {
var result = [];
for (var i = 0; i < array2.length; i++) {
var obj = array2[i]
var name2 = obj.uniqueName;
var number2 = obj.uniqueNumber;
for (var j = 0; j < array1.length; j++) {
var aj = array1[j];
var name1 = aj.uniqueName;
var number1 = aj.uniqueNumber;
if ((name1 === name2) && (number1 !== number2)) {
result.push(obj);
}
}
}
return result;
}
- 检查对象数组中是否有相同key的键值
isExistUniqueKeyValueArray: function (array) {
var s = new Set();
array.forEach(item => s.add(item.UniquekeyName));
if (s.size == array.length) {
return false;
} else {
return true;
}
}
- 检查两个对象数组是否相等
JSON.stringify(a1) == JSON.stringify(a2)
或 a1.toString() == a2.toString()
-
其他数组的方法
- for...of 和 for...in
for...of 用于遍历一个迭代器,如数组:(取的是属性)
优点:随时停止或退出 for...of 循环。
不用担心向对象中添加新的属性。for...of 循环将只循环访问对象中的值。
// 使用for...of循环:
let letters = ['a', 'b', 'c'];
letters.size = 3;
for (let letter of letters) {
console.log(letter);
}
// 结果: a, b, c
for...in 用来遍历对象中的属性:(取的是下标)
// 使用for...in循环:
let stus = ["Sam", "22", "男"];
for (let stu in stus) {
console.log(stus[stu]);
}
// 结果: Sam, 22, 男
- join
作用:用指定的分隔符将数组每一项拼接为字符串
参数:指定的分隔符,如果省略该参数,则使用逗号作为分隔符
返回值:拼接好的字符串
是否改变原数组:不改变
var ary = [1,2,3,4,5];
var res = ary.join('-');
console.log(ary); // [1, 2, 3, 4, 5]
console.log(res); // 1-2-3-4-5
- 对象数组找出符合条件的一项的下标:
arr.findIndex(val => {
return val.value === 'second'
}) //1
-
数组中是否包含特定的值-includes(字符串也有includes):
- 生成长度为9的空字符串数组
let m = Array(9).fill('')
- js创建1-100的数组
转载网址:http://www.manongjc.com/detail/14-cfdyzmrckbmptog.html
const xData = Object.keys(Array.apply(null, {length:100})).map(function(item){
return +item+1;
});
- js遍历对象数组时删除不符合的元素
for (var i = 0; i < list.length; i++) {
if (list[i]["status"] == 1) {
list.splice(i, 1);
i--;
}
- 从对象数组中取部分字段作为新的数组
params.ruleDeploys = tempRuleDeploysData.map((item) =>{
return {
watchObId: item.watchObId,
watchObType: item.watchObType,
timingValue: item.timingValue}
})
let keys = ['fields', 'schemaId', 'value', 'keyword']
keys.forEach((item) => {
filters.startVertices[item] = filter.startParam[item]
})
- 对象数组中某一字段里的值相同进行分组
A=[{'name': '小明','age':'15','job':'学生','hobby':'篮球'
},
{'name': '小红','age':'12','job':'学生','hobby':'游泳'},
{
'name': '小明','age':'21','job':'主持人','hobby':'相声'
},
{
'name': '小明','age':'28','job':'程序员','hobby':'睡觉'
},
{
'name': '小华','age':'23','job':'歌手','hobby':'唱歌'
},
{
'name': '小华','age':'27','job':'歌手1','hobby':'唱歌'
}];
const c = []
const d = {}
A.forEach(item => {
if(d[item.name] === undefined) {
d[item.name] = c.length
c.push([item])
} else {
c[d[item.name]].push(item)
}
})
//c的值
[[{
'name': '小明','age':'15','job':'学生','hobby':'篮球'
},
{
'name': '小明','age':'21','job':'主持人','hobby':'相声'
},
{
'name': '小明','age':'28','job':'程序员','hobby':'睡觉'
}],
[{
'name': '小红','age':'12','job':'学生','hobby':'游泳'
}],[{
'name': '小华','age':'23','job':'歌手','hobby':'唱歌'
}]]
- 根据一个数组过滤另一个数组对象
A=[{'name': '小明','age':'15','job':'学生','hobby':'篮球'
},
{'name': '小红','age':'12','job':'学生','hobby':'游泳'},
{
'name': '小黄','age':'21','job':'主持人','hobby':'相声'
},
{
'name': '小白','age':'28','job':'程序员','hobby':'睡觉'
},
{
'name': '小华','age':'23','job':'歌手','hobby':'唱歌'
}];
B=['小明','小华']
let tempMap = {}
B.forEach(item => {
tempMap[item] = item
})
newArray = A.filter(v => {
return tempMap[v.name]
})
//newArray的值
A=[{'name': '小明','age':'15','job':'学生','hobby':'篮球'
},
{'name': '小华','age':'23','job':'歌手','hobby':'唱歌'
}];
let arr1 = [
{ id: 1, name: '张三', age: 20, hobby: ['吃饭', '睡觉', '打豆豆'] },
{ id: 2, name: '李四', age: 21, hobby: ['吃饭', '睡觉', '打豆豆'] },
{ id: 3, name: '王五', age: 22, hobby: ['吃饭', '睡觉', '打豆豆'] },
{ id: 4, name: '赵六', age: 23, hobby: ['吃饭', '睡觉', '打豆豆'] }
]
let arr2 = [
{ id: 3, name: '王五' },
{ id: 4, name: '赵六' }
]
//因为arr2中的信息比较简单,我们需要根据arr2中的 id 字段进行判断,获取arr1中相同 id 字段的详细信息(不仅仅包括id、name,也需要包括age、hobby)并返回
let arr = arr1.filter( item => {
return arr2.find( prop => {
return prop.id == item.id
})
})
console.log(arr)
// 输出结果
[
{ id: 3, name: '王五', age: 22, hobby: [ '吃饭', '睡觉', '打豆豆' ] },
{ id: 4, name: '赵六', age: 23, hobby: [ '吃饭', '睡觉', '打豆豆' ] }
]
- 检测一个对象数组是否有某个元素的值有多条
const checkForDuplicates = (array, property) => {
let flag = false
const seenValues = new Set();
const duplicates = new Set();
array.forEach(item => {
const propValue = item[property];
if (seenValues.has(propValue)) {
duplicates.add(propValue);
} else {
seenValues.add(propValue);
}
});
flag = duplicates.size > 0 ? true : false
return flag
}
- 检测一个对象数组某个元素的属性值有多少条
const countByPropertyValue = (array, propertyName, value) => {
return array.filter(item => item[propertyName] === value).length;
}
-
总结