1. 程式人生 > >陣列去重實際運用

陣列去重實際運用

做了一個數組去重的demo;

假如是一個需要展示的陣列,然後又一個點選載入更多,或者下拉載入更多,但是每次都會呼叫資料庫的資料,為了減少後臺的負荷,我們可以把資料存在快取裡面,這裡就涉及到JSON.stringify();和JSON.parse();。我也不知道為什麼,快取的陣列讀出來的時候都是obj型別的,無法獲取到裡面的資料,所以需要將其轉換成json字串儲存,用到的時候在json解析,然後處理,在轉成json'字串存到快取裡面,所有的資料,只要是需要修改,就要解析 =>轉字串 => 然後快取。

當然,如果你有更好的辦法,當我沒說。

demo比較簡潔。沒那麼高大上的樣式

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
		<title>陣列去重</title>
		<style type="text/css">

			table{
				width: 100%;
				text-align: center;
			}
			#foot{
				width: 100%;
				text-align: center;
			}
			#foot button{
				width: 100px;
				height: 50px;
				line-height: 50px;
				text-align: center;
				border-radius: 10px;
				border: 1px solid #ccc;
				font-size: 18px;
			}
			.but{
				padding: 2px;
				border: 1px solid #ccc;
				border-radius: 2px;
			}
		</style>
	</head>

	<body>
		<table border="0" cellspacing="5" cellpadding="5" id="tab">
					
		</table>
		<div id="foot">
		<button onclick="addlist()"> 載入更多</button>
		<button onclick="qclist()"> 去重</button>
		</div>

	</body>
	<script type="text/javascript">
		 window.onload = function () {
            		sethtml();
        		};
        		//設定html
        		function sethtml(){
        			let jsonst, list = [];
        			if(sessionStorage.getItem("list")){
        				let arrlist = sessionStorage.getItem("list");
        				console.log("sethtml",arrlist);
        				console.log("sethtml",typeof arrlist);
        				if(null != arrlist || ""!= arrlist || '' != arrlist){
        					list = JSON.parse(arrlist);
        					console.log("sethtml",list);
        				}
        			console.log("sethtml",list);
					let str = "<tr><th>序號</th><th>ID</th><th>名字</th><th>內容</th><th>操作</th></tr>";
					for (let i = 0; i < list.length; i++) {
						str += "<tr>" +
									"<td>" + (i+1) + "</td>" +
									"<td>" + list[i].id + "</td>" +
									"<td>" + list[i].name + "</td>" +
									"<td>" + list[i].content + "</td>" +
									"<td ><button class='but' onclick='sc("+ i +")'> 刪除</button></td>" +
								"</tr>";
					}
					$("tab").innerHTML = str;
					}
        		}
        		//去重的資料處理
        		function qclist(){
        			let jsonst, list = [],list2 = [];
        			jsonst = sessionStorage.getItem("list");
        			console.log("qclist",jsonst);
        			list = JSON.parse(jsonst);
        			list = qc(list);
        			console.log("去重後的list",list);
        			list = JSON.stringify(list);
	        		sessionStorage.setItem("list",list);
        			sethtml();
        		}
        		//去重的專用函式
        		function qc(array) {
					let r = [];
					for(let i = 0, l = array.length; i < l; i++) {
						for(let j = i + 1; j < l; j++)
							if(array[i].id === array[j].id) j = ++i;
						r.push(array[i]);
					}
					return r;
				}
        		//刪除函式
        		function sc(i){
        			let jsonst, list = [],list2 = [];
        			jsonst = sessionStorage.getItem("list");
        			console.log("qclist",jsonst);
        			list = JSON.parse(jsonst);
        			list.splice(i,1);
        			list = JSON.stringify(list);
	        		sessionStorage.setItem("list",list);
        			sethtml();
        			
        		}
        		//新增函式
        		function addlist(){
        			let jsonst, list = [],list2 = [],list3 = [];
        			if(sessionStorage.getItem("list")){
        				jsonst = sessionStorage.getItem("list");
        				console.log("addlist jsonst",jsonst);
	        			list = JSON.parse(jsonst);
	        			console.log("addlist list",list);
	        			list3 = setlist();
	        			console.log("addlist list3",list3);
	        			for (let i = 0; i < list3.length; i++ ) {
	        				list.push(list3[i])
	        			}
						console.log("最終 list",list);
	        			list = JSON.stringify(list);
	        			sessionStorage.setItem("list",list);
	        			sethtml();
        			}else{
        				list2 = setlist();
	        			console.log("addlist2 list2",list2);
	        			for (let i = 0; i < list2.length; i++ ) {
	        				list.push(list2[i])
	        			}
	        			list = JSON.stringify(list);
	        			sessionStorage.setItem("list",list);
	        			sethtml();
        			}
        			
        		}
				
				//獲取id函式
				function $(id){
					return document.getElementById(id);
				}
			
				//假如是一個ajax
				function setlist(){
					let list = [
					{id:1,name:"你好",stat:1,show:false,content:"就好豐富的地方"},
					{id:2,name:"苦",stat:1,show:false,content:"的好機會"},
					{id:3,name:"沒看",stat:1,show:false,content:"都很糾結就"},
					{id:4,name:"使用者",stat:1,show:false,content:"大稅務師"},
					{id:5,name:"兒童",stat:1,show:false,content:"法發順豐"},
					{id:6,name:"同意",stat:1,show:false,content:"好幾十翁"},
					{id:7,name:"傳",stat:1,show:false,content:"採光好和然後"},
					{id:8,name:"支付",stat:1,show:false,content:"讓人一日遊"},
					{id:9,name:"企鵝",stat:1,show:false,content:"如風達的"},
					{id:10,name:"破",stat:1,show:false,content:"水電費費"},
					]
					
					return list;
					
				}
	
	</script>

</html>

以上就是寫的demo了。

後臺返回的資料不可能這麼簡單,但是無論怎麼複雜,只要思路沒問題,不要被矇蔽眼睛,那麼完全沒問題。萬變不離其宗。