今天在做帆软报表的时候,遇到了一个小问题。
将数据库ID数组与帆软前端填入的文本转换后的ID数组进行数组间差集计算时,出现错误,进控制台console了一下,发现数据库取出的数组是数值数组,而帆软单元格填入的文本转为数组后为字符串数组,故不能进行比较。
需将两个数组转化同一类型,才能进行计算。百度了一下,找到了下面几种方法。
数值数组转字符串数组
1、map()方式
var arr1 = [1, 2, 5];
arr1 = arr1.map(String); //将arr1转换为字符串数组
console.log(arr1);//结果: ["1","2","5"]
var arr2 = ["1","2","3","4"];
let diff = arr1.filter(function (val) { return arr2.indexOf(val) === -1 });//取arr1有而arr2没有的数组集
console.log(diff);//结果: ["5"]
2、toString()方式
var arr1 = [1, 2, 5];
arr1 = arr1.toString(); //将arr1转换为字符串,结果为:"1,2,5"
arr1=arr1.split(",");//将arr1转换为数组,分隔符为",",结果为["1", "2", "5"]
字符串数组转数值数组
1、map()方式
var arr1 = ["1","2","5"];
arr1 = arr1.map(Number); //将arr1转换为数值数组
console.log(arr1);//结果: [1,2,5]
var arr2 = [1,2,3,4];
let diff = arr1.filter(function (val) { return arr2.indexOf(val) === -1 });//取arr1有而arr2没有的数组集
console.log(diff);//结果: [5]
2、forEach()与parseInt()连用
var arr1 = ["1","2","5"];
arr1.forEach((item,index) =>{
arr1[index] = parseInt(arr1[index])
})
console.log(arr1); //结果:[1,2,5]
3、遍历使用parseInt()
var arr1 = ["1","2","5"];
for(let i=0;i<arr1.length;i++){
arr1[i] = parseInt(arr1[i])
}
console.log(arr1);// 结果为:[1,2,5]