摘要:前端對于數據的處理一般會用到等方法,下面逐次進行分析方法用于調用數組的每個元素,并將元素傳遞給回調函數。注意對于空數組是不會執行回調函數的。方法按照原始數組元素順序依次處理元素。
前端對于數據的處理一般會用到foreach、map、reduce、Object.values()、Object.keys()、Object.entries()等方法,下面逐次進行分析
foreach
forEach() 方法用于調用數組的每個元素,并將元素傳遞給回調函數。foreach方法不會返回執行結果。
注意: forEach() 對于空數組是不會執行回調函數的。foreach會改變原數組。
語法: array.forEach(function(currentValue, index, arr), thisValue)
示例: let schedulesObj = {}; dateArr.forEach((key) => { if (!schedulesObj[key]) { schedulesObj[key] = []; } schedulesObj[key].push(item); });
map
map() 方法返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值。
map() 方法按照原始數組元素順序依次處理元素。
注意: map() 不會對空數組進行檢測。
注意: map() 不會改變原始數組。
語法: array.map(function(currentValue,index,arr), thisValue)
示例: const initItems = initEvaluateItems.map(item => { const { score, id, itemName, levelDesc, maxLevel } = item; return { score, id, itemName, levelDesc, maxLevel }; });
reduce
reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 可以作為一個高階函數,用于函數的 compose。
注意: reduce() 對于空數組是不會執行回調函數的。
語法: array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
示例: let scheduleIdArray = Object.keys(curScheduleMonth).map(v => curScheduleMonth[v]).reduce((total, item) => { total = [...total, ...item]; return total; }, []);
Object.keys()
Object.keys() 方法會返回一個由一個給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和使用 for...in 循環遍歷該對象時返回的順序一致 。
語法: Object.keys(obj)
示例: var anObj = { 100: "a", 2: "b", 7: "c" }; console.log(Object.keys(anObj)); // console: ["2", "7", "100"]
Object.values()
Object.values()方法返回一個給定對象自身的所有可枚舉屬性值的數組,值的順序與使用for...in循環的順序相同 ( 區別在于 for-in 循環枚舉原型鏈中的屬性 )。
語法: Object.values(obj)
示例: var an_obj = { 100: "a", 2: "b", 7: "c" }; console.log(Object.values(an_obj)); // ["b", "c", "a"]
Object.entries()
Object.entries()方法返回一個給定對象自身可枚舉屬性的鍵值對數組,其排列與使用 for...in 循環遍歷該對象時返回的順序一致(區別在于 for-in 循環也枚舉原型鏈中的屬性)。
語法: Object.entries(obj)
示例: const anObj = { 100: "a", 2: "b", 7: "c" }; console.log(Object.entries(anObj)); // [ ["2", "b"], ["7", "c"], ["100", "a"] ]
1.時間相關
{ "success":true, "code": "success", "message": "成功", "data": { "monthData":[ { "month":"2018-05", "displayDesc":"有服務", "showType":"1", "tips":"請您選擇" } ] "calendarData":[ { "date":["2018-06-02","2018-07-09"], "displayDesc":"有服務", "showType":"1", "tips":"請您評價" } ], "schedules":[ { "scheduleId":"1", "appCode":"106", "appName":"公共服務", "cityId":"321568", "categoryCode":"16", "scheduleType":"1", "userDesc":"社區醫療", "systemDesc":"", "remind":"1", "repeat":"1", "status":"2", "serviceUrl":"", "beginTime":"2018-04-25", "endTime":"2018-04-26", } ] } }
import moment from "moment/moment"; /** * 通過beginTime和endTime,將列表值按照天的維度進行整理,產出的數據結構scheduleByDay * @param schedules */ export function genSchedulesObj(schedules = []) { let schedulesObj = {}; schedules.forEach((item) => { let { beginTime, endTime } = item; let _beginTime = new Date(beginTime).getTime(); let _endTime = new Date(endTime).getTime(); let dateArr = []; let dateReduce = ((_endTime - _beginTime) / (1000 * 24 * 60 * 60) + 1) || 1; dateReduce > 0 ? {} : (dateReduce = 0); for (let i = 0; i < dateReduce; i++) { dateArr.push(moment(_beginTime).format("YYYY-MM-DD")); _beginTime += (1000 * 24 * 3600); } dateArr.forEach((key) => { if (!schedulesObj[key]) { schedulesObj[key] = []; } schedulesObj[key].push(item); }); }); // let flag = true; // for (let key in schedulesObj) { // for (let i = 0, len = schedulesObj[key].length; i < len; i++) { // if (schedulesObj[key][i].status < 3) { // flag = false; // break; // } // } // } return { schedulesObj }; } /** * calendarData 日期上顯示代辦內容,根據這個數據創建tagData是一個一維數組,產出的數據結構tagDataByMonth * @param calendarData */ export function genCalendarDataObj(calendarData = []) { let calendarDataObj = {}; calendarData.forEach((item) => { item.date.forEach((key) => { if (!calendarDataObj[key]) { calendarDataObj[key] = []; } calendarDataObj[key].push({ displayDesc: item.displayDesc, showType: item.showType }); }); }); return calendarDataObj; } /** * 獲取當前月、上一個月、下一月及當前月的開始、結束日期 */ export function getFormatMonth(currentDate) { const beginDate = moment(currentDate).startOf("month").add(-1, "M").format("YYYY-MM-DD"); const endDate = moment(currentDate).endOf("month").add(1, "M").format("YYYY-MM-DD"); const preMont = moment(currentDate).subtract(1, "months").format("YYYY-MM"); const nextMont = moment(currentDate).add(1, "months").format("YYYY-MM"); const currMont = moment(currentDate).format("YYYY-MM"); const month = preMont + "," + currMont + "," + nextMont; return { beginDate, endDate, preMont, nextMont, currMont, month }; }
2.工具類函數
/** * 正則表達式獲取地址欄參數 */ export const getURLParameters = (url) => { url = url.split("?")[1] || ""; url = url.split("&"); return url.reduce((total, item) => { let itemArr = item.split("="); total[itemArr[0]] = itemArr[1]; return total; }, {}); }; /** * filter過濾 */ const filterArr = (scheduleByDay[currentDate] || []).filter(v => { return v.status !== 4; }); const tagData = Object.keys(tagDataByMonth).map((key) => { const obj = tagDataByMonth[key][0]; const scheduleByDayItem = scheduleByDay[key] || []; return { date: key, tag: scheduleByDayItem.length === 1 ? scheduleByDayItem[0].userDesc : obj.displayDesc, tagColor: obj.showType === "1" ? "#F5A623" : "#CCCCCC" }; }); let scheduleIdArray = Object.keys(curScheduleMonth).map(v => curScheduleMonth[v]).reduce((total, item) => { total = [...total, ...item]; return total; }, []); let scheduleId = scheduleIdArray.length ? scheduleIdArray[0].scheduleId : null; let isOnlyOne = scheduleId ? scheduleIdArray.every(v => v.scheduleId === scheduleId) : false; /** * 獲取服務端時間 */ getServerTimeAsync() { return new Promise((resolve) => { try { my.call("getServerTime", (res) => { resolve(res.time); }); } catch (e) { resolve(new Date().getTime()); } }); }, /** * 檢查文本域的長度 * @param keyword * @returns {*} */ checkKeywordLength(keyword) { const { maxlength } = this.data; if (keyword.length > maxlength) { keyword = keyword.substring(0, maxlength); } return keyword; }, const { data: { items: initEvaluateItems } } = serviceKey; const initItems = initEvaluateItems.map(item => { const { score, id, itemName, levelDesc, maxLevel } = item; return { score, id, itemName, levelDesc, maxLevel }; });
3.層級較深的數據結構
{ "success": true, "value": { "merchant": { "id": 0, #物理id "partakerId": 0, "partakerName": "string", "merchantPid": "string", "merchantName": "string", "owners": { "guarantee_owner":[{"account":"string","name":"string"}], }, #負責人 }, "extension":{ keyValues: { channel:{ key:{ id:"21", creator:"流年", dataSource:"", key:"duration", label:"項目周期", type:"date", isRequire:"Y" }, value:"2018-06-02 17:55:12" }, is_sign:{ key:{ id:"32", creator:"lily", dataSource:"[{"key":"current","value":"今天"},{"key":"last","value":"昨天"}]", key:"startTime", label:"啟動時間", type:"select", isRequire:"N" }, value:"last" }, merchantInfo:{ key:{ id:"02", creator:"jack", dataSource:"", key:"taskCount", label:"任務量", type:"number", isRequire:"Y" }, value:"55" }, code:"DEFAULT", tempName:"社區服務" } }, #動態字段 }, "msg": "string", #錯誤信息 "code": "string" #錯誤碼 } const { stat, value = {}, msg } = response || {}; if (stat === "fail") { message.error(msg); } const { merchant = {}, extension = {} } = value; const { keyValues = {} } = extension; const extenData = Object.entries(keyValues).map(v => { const [arr1, arr2] = v; const { key, recordId, value: newValue } = arr2; return { key, value: newValue, recordId }; }); console.log("動態數據-----", extenData); const linksObj = { 活動信息: links.slice(0, 2), 活動商戶信息: links.slice(2, 8), 保障商戶信息: links.slice(8), }; getFormDataDom = (data) => { const { getFieldDecorator } = this.props.form; const { formItem = {} } = this.props; return data.map((val) => { const { name, id, isSelect = false, isSelectInputOwners = false, isInput = false } = val; let isSimpleInitial; let isSelectInputOwnersInitial; if (isSelect || isInput) { isSimpleInitial = formItem && formItem[id] ? formItem[id] : ""; } if (isSelectInputOwners) { isSelectInputOwnersInitial = formItem && formItem[id] && formItem[id].length > 0 ? formItem[id].map(v => v.name) : []; } const initialValue = isSelectInputOwners ? isSelectInputOwnersInitial : isSelect || isInput ? isSimpleInitial : ""; return ({getFieldDecorator(`${id}`, { initialValue })(this.getFormItem(formItem, val)) } ); }); }; extenArr = (extenData = []) => { return extenData.map((item) => { const { key, value } = item; const { fieldKey, fieldLabel } = key; let { dataSource } = key; let spanValue = ""; if (dataSource === "") { spanValue = value; } else { try { dataSource = dataSource.replace(/"/img, """); const jsonValue = JSON.parse(dataSource); spanValue = jsonValue.reduce((total, i) => { total[i.key] = i.value; return total; }, {})[value]; } catch (e) { spanValue = ""; } } return { name: fieldLabel, id: fieldKey, spanValue }; }); };
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97503.html
摘要:實際中更多是作為其他數據結構的子結構,如哈希桶圖的鄰接表等等。實際中使用的鏈表數據結構,都是帶頭雙向循環鏈表。 文章目錄 一.算法的時間復雜度和空間復雜度1.算法...
摘要:什么是復雜度分析數據結構和算法解決是如何讓計算機更快時間更省空間的解決問題。分別用時間復雜度和空間復雜度兩個概念來描述性能問題,二者統稱為復雜度。復雜度描述的是算法執行時間或占用空間與數據規模的增長關系。這就是大時間復雜度表示法。 showImg(https://segmentfault.com/img/bVbtpFP?w=1000&h=574); 復雜度分析是整個算法學習的精髓,只要...
摘要:同樣以里的模塊為例,替換前后的卷積分支復雜度如下中使用與卷積級聯替代卷積中提出了卷積的,在確保感受野不變的前提下進一步簡化。 在梳理CNN經典模型的過程中,我理解到其實經典模型演進中的很多創新點都與改善模型計算復雜度緊密相關,因此今天就讓我們對卷積神經網絡的復雜度分析簡單總結一下下。1.時間復雜度1.2 卷積神經網絡整體的時間復雜度示例:用 Numpy 手動簡單實現二維卷積假設 Stride...
閱讀 2919·2023-04-25 19:08
閱讀 1416·2021-11-16 11:45
閱讀 1965·2021-10-13 09:40
閱讀 4128·2021-09-30 09:47
閱讀 2415·2019-08-30 15:44
閱讀 2261·2019-08-30 13:03
閱讀 1387·2019-08-30 12:56
閱讀 1890·2019-08-26 14:04