const {ccclass, property} = cc._decorator; @ccclass export default class ReadCsv extends cc.Component { static _instance: ReadCsv = null!; public static instance() { if (!this._instance) { this._instance = new ReadCsv(); } return this._instance; } public CSVToArray(fullPath:string,callback) { cc.resources.load(fullPath, function (err, string) { if (err) { cc.error(err.message || err); return; } let array = ReadCsv.instance().CSVStringToArrayJerry(string); if (callback){ callback(array); } }); } public CSVStringToArray( strData: string, strDelimiter:any ):any[] { strDelimiter = (strDelimiter || ","); var objPattern = new RegExp( ( "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" + "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + "([^\"\\" + strDelimiter + "\\r\\n]*))" ), "gi" ); var arrData = [[]]; var arrMatches = null; while (arrMatches = objPattern.exec( strData )){ var strMatchedDelimiter = arrMatches[ 1 ]; if (strMatchedDelimiter.length && (strMatchedDelimiter != strDelimiter)){ arrData.push( [] ); } if (arrMatches[ 2 ]){ var strMatchedValue = arrMatches[ 2 ].replace( new RegExp( "\"\"", "g" ), "\"" ); } else { var strMatchedValue = arrMatches[ 3 ]; } arrData[ arrData.length - 1 ].push( strMatchedValue ); } if(arrData.length>0){ arrData.pop(); } return arrData; } //用这个方法也可以 public CSVStringToArrayJerry(strData: cc.Asset):any[]{ let str = strData.toString().replace(/\r/g,""); let mapArr = str.split("\n"); var array = []; for (let index = 0; index < mapArr.length; index++) { const element = mapArr[index]; let arr = element.split(","); array[index] = arr; } return array; } }