整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          新手如何掌握制作和提交網站地圖?

          站地圖作為根據網站的結構,框架,內容生成的導航網頁文件。

          大多數人都知道網站地圖對于提高用戶體驗有好處:它們為網站訪問者指明方向,并幫助迷失的訪問者找到他們想看的頁面。

          那么什么是網站地圖呢?

          在開始介紹網站地圖的制作與提交之前,我們有必要先了解一下什么是網站地圖。

          網站地圖也就是sitemap,是一個網站所有鏈接的容器。很多網站的鏈接層次比較深,蜘蛛是很難抓取到的,網站地圖可以方便搜索引擎蜘蛛抓取網站頁面,通過抓取網站頁面,可以清晰的了解網站的架構。網站地圖一般存放在根目錄下并命名為sitemap,為搜索引擎蜘蛛引路,增加網站重要內容頁面的收錄。

          網站地圖的作用:

          1.為搜索引擎蜘蛛提供可以瀏覽整個網站的鏈接,簡單的體現出網站的整體框架。

          2.為搜索引擎蜘蛛提供一些鏈接,指向動態頁面或者采用其他方法比較難以到達的頁面。

          3.作為一種潛在的著陸頁,可以對搜索流量進行優化。

          4.如果訪問者試圖訪問網站所在域內并不存在的URL,那么這個訪問者就會被轉到“無法找到文件”的錯誤頁面,而網站地圖可以作為該頁面的“準”內容。

          HTML版本的網站地圖

          html版本的網站地圖就是用戶可以在網站上看到的,列出網站上所有主要頁面的鏈接的頁面。對于小型網站來說,甚至可以列出整個網站的所有的頁面。而對于具有一定規模的網站來說,一個網站地圖不可能羅列所有的頁面鏈接,可以采用兩種方法解決:

          第一種就是網站地圖只列出網站最主要的鏈接,如一級分類,二級分類。

          第二種方法是將網站地圖分成幾個文件,主網站地圖列出通往那次級網站的鏈接,刺激網站地圖在列出一部分頁面鏈接。

          XML本的網站地圖

          XML版本的網站地圖是由goole首先提出的,怎么區分呢?上面所說的HTML版本中的sitemap首字母s是小字寫的,XML版本中的S則是大寫的。XML版本的網站地圖是由XML標簽組成的,文件本身必須UTF-8編碼,網站地圖文件實際上就是列出網站需要被收錄的頁面的URL。最簡單的網站地圖可以是一個純文本文件,文件只要列出頁面的URL,一行一個URL,搜索引擎就能抓取并理解文件內容。

          網站地圖的制作方法

          網上有很多網站地圖的生成方法,比如說在線生成,軟件生成等。這里小編推薦使用小爬蟲網站地圖生成工具:http://www.sitemap-xml.org。使用方法如下:

          1)輸入域名,選擇網站對應的編碼,點擊“生成”按鈕(建議使用搜狗瀏覽器或者google瀏覽器)如圖所示:

          2)等待小爬蟲爬行網站,爬行時間根據網站內容多少和服務器訪問速度不定,如果數據較多,則建議晚上10點以后操作,

          3)下載sitemap.xml或者sitemap.html文件,上傳到網站根目錄,在首頁做鏈接,如圖所示:

          需要說明一下sitemap.xml和sitemap.html文件的區別:

          sitemap.xml文件的創建是為了更有利于搜索引擎的抓取,從而提高工作效率,生成sitemap.xml文件后將其鏈接放入robort.txt文件內。提示:

          良好的robort.txt協議可以指引搜索引擎抓取方向,節省蜘蛛抓取時間,所以無形中提升了蜘蛛的工作效率,也就增大了頁面被抓取的可能性。

          將sitemap.xml和robort.txt文件放在網站的根目錄下。

          sitemap.html格式的網站地圖主要是用來方便用戶的瀏覽,并不能起到XMLSitemap所起的作用。所以最好兩者都要有。

          4)登錄百度站長平臺,點擊“鏈接提交”,填寫sitemap.xml對應的URL地址,如圖所示:

          提交完后,百度搜索引擎蜘蛛會對我們的網站進行抓取。大量案例證明,添加網站能加速網站內容收錄速度,提升網站收錄率。但是這要建立在網站內容質量符合搜索引擎標準的基礎上,如果網站內容質量太差,則使用網站地圖也是無濟于事的。以上就是制作提交網站地圖的一些分享,也是基礎中的基礎,希望對新手有用。

          文章選自《SEO全網優化指南》

          來源:盧松松博客,歡迎分享

          家好,很高興又見面了,我是姜茶的編程筆記,我們一起學習前端相關領域技術,共同進步,也歡迎大家關注、點贊、收藏、轉發,您的支持是我不斷創作的動力

          在 JavaScript 中,Array.prototype.map 是一個常用的方法,它對數組的每個元素調用提供的函數,并返回一個新數組,包含函數的返回值。為了更好地理解其內部機制,今天我們將從零開始,實現一個自定義的 map 方法,并詳細解析其實現步驟。

          實現自定義 map 方法

          首先,我們創建一個 myMap 方法,將其添加到 Array.prototype 上。這個方法接受兩個參數:一個回調函數 callback 和一個可選的 thisArg 參數。callback 函數將對數組的每個元素進行操作,thisArg 是執行回調函數時的 this 值。

          Array.prototype.myMap = function(callback, thisArg) {
            // 將傳入的數組轉換為對象
            const O = Object(this);
          
            // 獲取數組的長度
            const len = O.length >>> 0;
          
            // 如果 callback 不是函數,則拋出 TypeError
            if (typeof callback !== 'function') {
              throw new TypeError(callback + ' is not a function');
            }
          
            // 創建一個新的數組,用于存儲映射結果
            const result = new Array(len);
          
            // 遍歷數組并應用回調函數
            for (let i = 0; i < len; i++) {
              // 只有當元素在數組中存在時才進行映射
              if (i in O) {
                // 調用回調函數,傳遞 thisArg 作為 this 值,并傳遞當前元素、索引、數組本身
                result[i] = callback.call(thisArg, O[i], i, O);
              }
            }
          
            return result;
          };
          

          讓我們逐步解析這個實現。

          1. 將傳入的數組轉換為對象

          我們首先將 this 轉換為一個對象,以便在方法中使用:

          const O = Object(this);
          

          2. 獲取數組的長度

          使用 >>> 0 操作符將長度轉換為無符號整數,確保其為正整數:

          const len = O.length >>> 0;
          

          3. 檢查回調函數

          如果 callback 不是函數,則拋出一個 TypeError

          if (typeof callback !== 'function') {
            throw new TypeError(callback + ' is not a function');
          }
          

          4. 創建結果數組

          我們創建一個與原數組長度相同的新數組,用于存儲映射結果:

          const result = new Array(len);
          

          5. 遍歷數組并應用回調函數

          使用 for 循環遍歷數組的每個索引。如果當前索引存在于數組中,則調用回調函數,并將結果存儲在 result 數組中:

          for (let i = 0; i < len; i++) {
            if (i in O) {
              result[i] = callback.call(thisArg, O[i], i, O);
            }
          }
          

          6. 返回結果數組

          最后,我們返回存儲映射結果的 result 數組:

          return result;
          

          示例使用

          下面是一個示例,展示如何使用自定義的 myMap 方法:

          const numbers = [1, 2, 3, 4, 5];
          const doubled = numbers.myMap(x => x * 2);
          
          console.log(doubled); // 輸出 [2, 4, 6, 8, 10]
          

          在這個示例中,我們將 numbers 數組中的每個元素都乘以 2,并將結果存儲在 doubled 數組中。結果輸出為 [2, 4, 6, 8, 10],這與內置的 Array.prototype.map 方法的行為一致。

          結論

          通過實現自定義的 map 方法,我們深入理解了 JavaScript 中數組的操作方式。希望你可以更好地掌握 map 方法的內部機制,并提升你的 JavaScript 編程技巧。

          最后

          如果你有任何問題或建議,歡迎在評論區留言交流!祝你編程愉快!

          ap、filter、reduce都是高階函數,它們的功能非常強大,可以搭配箭頭函數來完成復雜的數組數據處理。關于它們的用法很多人寫過,但少有人寫結合案例來寫。在這里我會對這3個函數的用法結合案例來詳細講述,并額外寫了for循環版本用來幫助理解。

          模擬數據

          要詳細講述這3個高階函數的用法必須結合實際案例來講。現在有一個這樣的數組,這個數組是任務清單:

          let todo = [
              {id: 1, name: "吃飯", done: true},
              {id: 2, name: "睡覺", done: true},
              {id: 3, name: "編程", done: false},
              {id: 4, name: "寫作", done: false},
              {id: 5, name: "逛街", done: true},
          ]

          map方法

          參數:只接收一個參數,必須是處理數據的函數。

          作用:對數組成員調用傳來的參數函數,進行處理后給出返回值。

          返回值:返回由返回值構成的新數組。

          需求

          寫一個可以更新todo數組數據的函數,例如對todo數組中id為3的done字段更新為true。

          代碼

          map版本:

          function updateTodo(arr, id, state) {  // arr是數組,id是要處理的id,state是要更新的狀態
              return arr.map(item => {
                  if (item.id === id) return {...item, done: state}  // 若找到指定id,那么更新數據
                  else return item  // 若沒找到指定id,返回原值
              })
          }`

          for循環版本:

          function updateFor(arr, id, state) {
              let newArr = []
              for (let i = 0; i < arr.length; i++) {
                  if (arr[i].id === id) newArr[i] = {...arr[i], done: state}
                  else newArr[i] = arr[i]
              }
              return newArr
          }`

          測試

          const newTodo1 = updateTodo(todo,3,true)  // 檢查運行結果可以看到id是3的記錄的狀態已更新為true
          todo = newTodo1  // 將新內容更新到原數組
          const newTodo2 = updateFor(todo,1,false)  // 檢查運行結果可以看到id是1的記錄的狀態已更新為false
          todo = newTodo2  // 將新內容更新到原數組`

          filter方法

          參數:只接收一個參數,必須是處理數據的函數。

          作用:對數組成員調用傳來的參數函數,進行處理后給出true或false的返回值。

          返回值:返回由返回值為true的數組成員構成的新數組。

          需求

          寫一個可以刪除todo數組指定行的函數,例如將todo數組中id為3那行數據刪除。

          代碼

          filter版本:

          function deleteTodo(arr, id) {  // arr是數組,id是要處理的id,state是要更新的狀態
              return arr.filter(item => {
                  if (item.id === id) return false  // 若找到指定id,那么返回false,表示該行數據不要
                  else return true  // 其他行數據返回true,表示該行數據需要
              })
          }`

          for循環版本:

          function deleteFor(arr, id) {
              let newArr = []
              for (let i of arr) {
                  if (i.id !== id) newArr.push(i)
              }
              return newArr
          }`

          測試

          const newTodo1 = deleteTodo(todo,3)  // 檢查運行結果可以看到id是3的記錄不存在
          todo = newTodo1  // 將新內容更新到原數組
          const newTodo2 = deleteFor(todo,4)  // 檢查運行結果可以看到id是4的記錄不存在
          todo = newTodo2  // 將新內容更新到原數組

          reduce方法

          參數:接收兩個參數,第一個必須是處理數據的函數,第二個是初始值(數字型)。注意:該參數函數可以接收到4個參數,第一個參數是累加值,第二個參數是當前的數組成員,第三個參數是索引,第四個參數是數組,一般后2個可忽略。

          作用:對數組成員調用傳來的參數函數,進行處理后給出數字,然后將該數字累加到累加值上。

          返回值:返回累加值。

          需求

          寫一個可以統計todo數組中done為true的記錄數量的函數。

          代碼

          reduce版本:

          function countTodo(arr) {
              return arr.reduce((total,item) => total+(item.done?1:0),0)
          }

          for循環版本:

          function countFor(arr) {
              let count = 0
              for (let i of arr) {
                  if (i.done) count++
              }
              return count
          }

          測試

          const count1 = countTodo(todo)  // 檢查運行結果可以看到統計結果是3
          const count2 = countFor(todo)  // 檢查運行結果可以看到統計結果也是3

          結束語

          寫完了,希望對還沒徹底掌握map、filter、reduce這3個高階函數用法的朋友能有所幫助。請參考數據、需求和代碼,嘗試理解,自己敲一遍,然后嘗試自己寫一下。這樣就能徹底掌握map、filter、reduce這3個常用的高階函數了。

          請注意:這3個函數底層有優化,用它們比自己寫循環的運行效率要高,代碼也更簡潔。它們都是前端程序員處理數據時經常要用到的!


          主站蜘蛛池模板: 久久精品一区二区三区日韩| 亚洲一区二区三区免费在线观看 | 男插女高潮一区二区| 狠狠综合久久av一区二区 | 国产一区二区三区樱花动漫| 亚洲日韩AV一区二区三区中文 | 无码人妻精品一区二区三区不卡| 无码少妇一区二区| 中文字幕国产一区| 在线观看一区二区三区av| 成人免费区一区二区三区| 成人免费视频一区| 色窝窝无码一区二区三区 | 综合激情区视频一区视频二区| 中文乱码人妻系列一区二区| 亚洲av高清在线观看一区二区 | 久久精品道一区二区三区| 日韩中文字幕精品免费一区| 一本AV高清一区二区三区| 国产成人高清视频一区二区| 国产美女精品一区二区三区| 成人免费av一区二区三区| 亚洲制服丝袜一区二区三区| 国产剧情国产精品一区| 激情爆乳一区二区三区| 日韩在线视频一区| 毛片一区二区三区| 国产一区在线电影| 日本激情一区二区三区| 不卡一区二区在线| 亚洲AV成人精品日韩一区| 中文字幕无码一区二区三区本日 | 一区二区三区在线免费观看视频| 在线视频一区二区| 无码人妻久久一区二区三区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲丰满熟女一区二区v| 亚洲福利视频一区二区| 一区二区三区视频网站| 久久无码人妻一区二区三区 | 精品国产AⅤ一区二区三区4区 |