在开发项目中,经常会遇到对数组的操作,比如对数组的数据进行删减或增加,同时也会对每个数组里的数据进行删减,下面就举个例子说明一下。
直接给一段代码
getOnlineColumns(this.taskForm.onlineId).then(res => {//获取从表相关信息
if (res.success) {
console.log("getOnlineColumns res=",res)
this.columns = res.result.columns
console.log("getOnlineColumns columns=",this.columns)
this.columns.forEach(function(item, index) {//删除不需要的列
Object.keys(item).map(function (key) {
null == item[key] && delete item[key]
})
})
this.columns = this.indexColumn.concat(this.columns)
this.columns = this.columns.concat(this.actionColumn)
console.log("this.columns=",this.columns)
上面是根据onlineId获取表单列信息,
获取的信息如下:
{
"description": "商城订单表",
"pidField": null,
"cgButtonList": [],
"checkboxFlag": "Y",
"currentTableName": "ces_order_main",
"dictOptions": {},
"enhanceJs": null,
"fieldHrefSlots": [],
"hasChildrenField": null,
"hideColumns": [],
"paginationFlag": "Y",
"scrollFlag": 1,
"textField": null,
"code": "56efb74326e74064b60933f6f8af30ea",
"tableType": 2,
"relationType": null,
"columns": [
{
"title": "订单编码",
"dataIndex": "order_code",
"align": "center",
"customRender": null,
"scopedSlots": null,
"hrefSlotName": null,
"showLength": 0,
"sorter": false,
"linkField": null,
"tableName": null
},
{
"title": "下单时间",
"dataIndex": "xd_date",
"align": "center",
"customRender": null,
"scopedSlots": null,
"hrefSlotName": null,
"showLength": 0,
"sorter": false,
"linkField": null,
"tableName": null
},
{
"title": "订单总额",
"dataIndex": "money",
"align": "center",
"customRender": null,
"scopedSlots": null,
"hrefSlotName": null,
"showLength": 0,
"sorter": false,
"linkField": null,
"tableName": null
},
{
"title": "备注",
"dataIndex": "remark",
"align": "center",
"customRender": null,
"scopedSlots": null,
"hrefSlotName": null,
"showLength": 0,
"sorter": false,
"linkField": null,
"tableName": null
}
],
"formTemplate": "1",
"foreignKeys": [],
"desFormCode": null,
"isDesForm": null
}
但这里的"columns":不能直接给给this.columns,否则会报错,所以需要进行处理
首先要删除不需要的列
this.columns.forEach(function(item, index) {//删除不需要的列
Object.keys(item).map(function (key) {
null == item[key] && delete item[key]
})
})
变成下面的列
[
{
"title": "订单编码",
"dataIndex": "order_code",
"align": "center",
"showLength": 0,
"sorter": false,
},
{
"title": "下单时间",
"dataIndex": "xd_date",
"align": "center",
"showLength": 0,
"sorter": false,
},
{
"title": "订单总额",
"dataIndex": "money",
"align": "center",
"showLength": 0,
"sorter": false,
},
{
"title": "备注",
"dataIndex": "remark",
"align": "center",
"showLength": 0,
"sorter": false,
"linkField": null,
"tableName": null
}
]
同时根据要求,在前面要增加一组信息indexColumn,内容如下:
indexColumn: [{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
}]this.columns = this.indexColumn.concat(this.columns)
同时在后面要增加一组信息actionColumn
actionColumn: [{
title: "操作",
dataIndex: "action",
scopedSlots: { customRender: "action" },
align: "center",
width: 150
}]this.columns = this.columns.concat(this.actionColumn)
最后合成如下数组:
[
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
"title": "订单编码",
"dataIndex": "order_code",
"align": "center",
"showLength": 0,
"sorter": false,
},
{
"title": "下单时间",
"dataIndex": "xd_date",
"align": "center",
"showLength": 0,
"sorter": false,
},
{
"title": "订单总额",
"dataIndex": "money",
"align": "center",
"showLength": 0,
"sorter": false,
},
{
"title": "备注",
"dataIndex": "remark",
"align": "center",
"showLength": 0,
"sorter": false,
"linkField": null,
"tableName": null
}, {
title: "操作",
dataIndex: "action",
scopedSlots: { customRender: "action" },
align: "center",
width: 150
}
]
另外附上其它一些数组的相关方法如下
1、将数组合并成字符串(返回字符串)[ Array.join() ]
var a = [1,2,3];
var b = a.join("");
console.log(a); //[1, 2, 3],原数组不改变
console.log(b); //"123",变成字符串
2、返回逆序数组(倒叙排列数组)[ Array..reverse() ]
var a = [1,2,3];
a.reverse();
console.log(a); //直接改变a数组的值 返回的是[3,2,1]
3、Array.concat(),创建并返回一个新数组
var a = [1,2,3];
var b = a.concat(4,5);
var c = a.concat([4,5]);
console.log(a); //返回的还是[1,2,3]
console.log(b); //返回[1,2,3,4,5]
console.log(c); //返回[1,2,3,4,5]
// 复制数组
var a = [1,2,3];
var b = a.concat();
console.log(a); //返回[1,2,3]
console.log(b); //返回[1,2,3]
4、Array.slice()方法,返回指定数组的片段或者子数组。不会改变原数组
var a = [1,2,3,4,5];<br>
a.slice(0,3); //返回[1,2,3] 第一个参数是截取开始的位置(包括),第二个参数是截取结束的位置(不包括)
a.slice(3); //返回[4,5]
a.slice(1,-1); //返回[2,3,4] 负数表示倒数
console.log(a); //返回[1,2,3,4,5]
5、Array.splice()方法,用来删除或插入元素,会修改原数组!
数组的起始位置为0
var a = [1,2,3,4,5,6,7,8];
var b = a.splice(1,2); //第一个参数是截取的起始位置(包括),第二个参数是截取的个数,之后的参数就是添加在元数组的新值
console.log(a); //返回[1, 4, 5, 6, 7, 8]
console.log(b); //返回[2, 3]
可以用来解决在数组起始部位加入数据
this.noticeMessageList.splice(0, 0, { fromUser: 'zhangq1',
noticeMessage: '此处添加message'})
6、push()方法与pop()方法
push()方法在数组的尾部添加一个或者多个元素,并返回数组的新长度。注意的是,改变的是原数组的值,返回的是新数组的长度。
pop()方法删除数组的最后一个元素,并返回它的删除值。也是改变原数组,返回的是删除的值。
7、unshift()方法与shift()方法
unshift()方法类似于push()不同的是,他是在数组头部添加,其他都一样
shift()方法则类比pop()方法。
8、forEach()方法,从头至尾遍历数组,为每个元素调用指定的函数。
var a = [1,2,3,4,5];
var sum = 0;
a.forEach(function (value) {
sum += value
})
console.log(sum); //sum = 15
9、map()方法
和forEach()类似,调用数组的每个元素传递给指定函数,并返回一个数组,所以它和forEach()的区别在于,有一个返回值。不修改原数组,返回的数组长度和原数组相同
var a = [1,2,3,4,5];
var b = a.map(function (value) {
return value+1
})
console.log(b); //返回[2,3,4,5,6]
10、filter()方法,返回的是调用数组的一个子集
var a = [1,2,3,4,5];
var b = a.filter(function (value) {
return value > 3
})
console.log(b); //返回[4,5]
注意:如果使用map()方法,返回的是[false, false, false, true, true]
filter()会跳过稀疏数组中缺少的元素,他的返回数组总是稠密的。所以可以用一下方法来压缩稀疏数组的空缺。
var a = [1,2,,,5];
var b = a.filter(function (value) {
return true
})
console.log(b); //返回[1,2,5]