ด้วยการพัฒนาเทคโนโลยีส่วนหน้าอย่างต่อเนื่อง อินเทอร์เฟซที่ต้องแสดงในงานส่วนหน้ามีความซับซ้อนมากขึ้นเรื่อยๆ ดังนั้นจึงมีสถานการณ์การประมวลผลข้อมูลเพิ่มมากขึ้น ตัวอย่างเช่น: มักจะจำเป็นต้องแสดงโครงสร้างแบบต้นไม้ ในระบบการจัดการพื้นหลัง และข้อมูลส่วนหน้าที่ส่งคืนโดยพื้นหลังคือโครงสร้างแนวนอน ในเวลานี้ เราจำเป็นต้องแปลงข้อมูลให้เป็นโครงสร้างแบบต้นไม้ เมื่อแสดงฮิสโตแกรม echart ข้อมูลที่ส่งคืนจะต้องถูกขจัดข้อมูลซ้ำซ้อนและรวมเข้าด้วยกัน เมื่อทำการกรอง เราจำเป็นต้องจัดเรียงข้อมูล สิ่งที่พบบ่อยที่สุดคือ มีการเพิ่มเติม การลบ การแก้ไข และการตรวจสอบของ Dom เมื่อเราแสดงความคิดเห็น ฯลฯ ดังนั้นบทความในวันนี้จะพาคุณเข้าสู่สถานการณ์ทางธุรกิจเหล่านี้และเผชิญกับปัญหาเหล่านี้ เราไม่กลัวการดำเนินการกับข้อมูล JavaScript อีกต่อไป และปล่อยให้การพัฒนาทำงานกลายเป็นเรื่องง่ายและมีประสิทธิภาพ
: นี่คือระบบการจัดการเบื้องหลัง - โมดูลการจัดการพจนานุกรม ซึ่งรวมถึงการดำเนินการสี่ประการในการเพิ่ม ลบ การแก้ไข และการสืบค้นพจนานุกรมข้อมูล แล้ววิธีแก้ปัญหาของเราในการจัดการกับการดำเนินการทั้ง 4 ประการนี้คืออะไร โปรดอ่านต่อ
arr.push ใหม่จะผลักองค์ประกอบตั้งแต่หนึ่งรายการขึ้นไปจากด้านหลังของอาร์เรย์
var arr = [1,2,3]; // Return: ความยาวของอาร์เรย์ที่แก้ไข arr.push(4,5,6); console.log(arr) //ผลลัพธ์เอาต์พุต arr=[1,2,3,4,5,6]
arr.unshift เพิ่มองค์ประกอบตั้งแต่หนึ่งรายการขึ้นไปจากด้านหน้าของอาร์เรย์
var arr = [1,2,3]; // Return: ความยาวของอาร์เรย์ที่แก้ไข arr.unshift(4,5,6); console.log(arr) //ผลลัพธ์เอาต์พุต arr=[4,5,6,1,2,3]
arr.shift ใช้เพื่อลบองค์ประกอบแรกของอาร์เรย์
// วิธี shift ของอาร์เรย์ใช้เพื่อลบองค์ประกอบแรก องค์ประกอบของอาร์เรย์ ลบหนึ่งองค์ประกอบ var arr = [1,2,3]; // ส่งคืนองค์ประกอบที่ถูกลบ; arr.กะ(); //Output result arr=[2,3]
arr.pop ลบองค์ประกอบสุดท้ายของอาร์เรย์
// วิธีการป๊อปของอาร์เรย์ใช้เพื่อลบองค์ประกอบสุดท้ายของอาร์เรย์ var arr = [1,2,3] ; // ส่งคืนองค์ประกอบที่ถูกลบ; arr.ป๊อป(); //ผลลัพธ์เอาต์พุต arr = [1,2];
arr.splice : สามารถเพิ่ม ลบ หรือแก้ไขที่ ตำแหน่งใดก็ได้ ในอาร์เรย์
โดยมีฟังก์ชัน 3 แบบ ได้แก่ การลบ การแทรก และการแทนที่ ส่งคืนอาร์เรย์ (รวมถึงรายการที่ถูกลบดั้งเดิมในอาร์เรย์ (ส่งคืนอาร์เรย์ว่างหากไม่มีการลบรายการ))
Syntax
splice(index,howmany,item1,...itemx);
1. Delete สามารถลบรายการจำนวนเท่าใดก็ได้โดยการระบุพารามิเตอร์ 2 รายการ ได้แก่ ตำแหน่งของรายการแรกที่จะลบ และจำนวนรายการที่จะลบ ให้ arr=[1,2,3]; ให้ arr1=arr.splice(1,2);//จะลบองค์ประกอบที่ 2 และ 3 ของอาร์เรย์ (เช่น 2,3) การแจ้งเตือน (arr);//[1] การแจ้งเตือน (arr1);//[2,3] 2. การแทรกสามารถแทรกรายการจำนวนเท่าใดก็ได้ในตำแหน่งที่ระบุโดยระบุเพียง 3 พารามิเตอร์เท่านั้น: ตำแหน่งเริ่มต้น, 0 (จำนวนรายการที่จะลบ) และรายการที่จะแทรก ให้ arr=[1,2,3]; ให้ arr1=arr.splice(1,0,4,5);//จะแทรก 4,5 โดยเริ่มจากตำแหน่งที่ 1 ของอาร์เรย์ การแจ้งเตือน (arr);//[1,4,5,2,3] การแจ้งเตือน (arr1);//[] 3. การแทนที่สามารถแทรกรายการจำนวนเท่าใดก็ได้ในตำแหน่งที่ระบุ และลบรายการจำนวนเท่าใดก็ได้พร้อมๆ กัน คุณจะต้องระบุพารามิเตอร์ 3 รายการเท่านั้น ได้แก่ ตำแหน่งเริ่มต้น จำนวนรายการที่จะลบ และจำนวนรายการเท่าใดก็ได้ จะถูกแทรก (จำนวนการแทรกไม่จำเป็นต้องเท่ากับจำนวนที่ถูกลบ) ให้ arr = [1,2,3]; ให้ arr1=arr.splice(1,1,"red","green");//จะลบ 2 จากนั้นจึงแทรกสตริง "red" และ "green" จากตำแหน่งที่ 2 การแจ้งเตือน(arr);//[1,"สีแดง","สีเขียว",3] alert(arr1);//[2]
arr.indexOf : ค้นหาดัชนีตามองค์ประกอบ หากองค์ประกอบนั้นอยู่ในอาร์เรย์ ให้ส่งคืนดัชนี หรือส่งคืน -1 หรือไม่ อาร์เรย์
var arr = [10 ,20,30] console.log(arr.indexOf(30)); // 2 console.log(arr.indexOf(40)); // -1
arr.findIndex : ใช้เพื่อค้นหาดัชนีขององค์ประกอบแรกที่ตรงตามเงื่อนไข หากไม่ส่งคืน -1
var arr = [10, 20, 30] ; var res1 = arr.findIndex (ฟังก์ชัน (รายการ) { คืนสินค้า >= 20; - //ส่งคืนดัชนีขององค์ประกอบแรกที่ตรงตามเงื่อนไข console.log(res1);
ใช้ เพื่อเชื่อมต่อหลายองค์ประกอบในอาร์เรย์เข้ากับสตริงด้วยตัวคั่นที่ระบุ
var arr = [ 'User1' ,'ผู้ใช้2','ผู้ใช้3']; var str = arr.join('|'); console.log(str); // ผู้ใช้ 1 |. ผู้ใช้ 2 |. ผู้ใช้ 3
วิธี แยก สตริง: แปลงตัวเลข ตามด้วยอักขระที่แยกจากกัน
// วิธีนี้ใช้เพื่อแยกสตริงออกเป็นอาร์เรย์ที่มีสัญลักษณ์ที่ระบุ var str = 'ผู้ใช้ 1 | ผู้ใช้ 3'; var arr = str.split('|'); console.log(arr); ['ผู้ใช้ 1', 'ผู้ใช้ 2', 'ผู้ใช้ 3']
ต้องบอกว่าด้วยความก้าวหน้าของเทคโนโลยีและการพัฒนาฮาร์ดแวร์ ประสิทธิภาพการประมวลผลของเบราว์เซอร์ก็ดีขึ้นเช่นกัน ต่อไปเราจะได้พบกัน สถานการณ์ที่สอง - การดำเนินการเรียงลำดับข้อมูล ซึ่งหมายความว่าเราจำเป็นต้องใช้การเรียงลำดับต่างๆ ที่ส่วนหน้า เรามาอ่านกันดีกว่า~
var arr = [23,34,3,4,23,44,333,444]; arr.sort (ฟังก์ชัน (a, b) { กลับ AB; - console.log(arr);
ที่นี่ เรายังแนะนำอัลกอริธึมการเรียงลำดับที่ใช้กันทั่วไปหลายอย่าง:
var arr = [23,34,3,4,23,44,333,444]; var arrShow = (ฟังก์ชัน insertionSort (อาร์เรย์) { ถ้า(Object.prototype.toString.call(array).slice(8,-1) ==='Array'){ สำหรับ (var i = 1; i < array.length; i++) { คีย์ var = อาร์เรย์ [i]; วาร์ เจ = ฉัน - 1; ในขณะที่ (j >= 0 && array[j] > คีย์) { อาร์เรย์[เจ + 1] = อาร์เรย์[เจ]; เจ--; - อาร์เรย์ [j + 1] = คีย์; - ส่งคืนอาร์เรย์; }อื่น{ กลับ 'อาร์เรย์ไม่ใช่อาร์เรย์!'; - })(อาร์อาร์); console.log(arrShow);//[3, 4, 23, 23, 34, 44, 333, 444]
binaryInsertionSort (อาร์เรย์) { ถ้า (Object.prototype.toString.call (array).slice (8, -1) === 'อาร์เรย์') { สำหรับ (var i = 1; i < array.length; i++) { คีย์ var = array[i] ซ้าย = 0 ขวา = i - 1; ในขณะที่ (ซ้าย <= ขวา) { var middle = parseInt((ซ้าย + ขวา) / 2); ถ้า (คีย์ <อาร์เรย์[กลาง]) { ขวา = กลาง - 1; } อื่น { ซ้าย = กลาง + 1; - - สำหรับ (var j = i - 1; j >= ซ้าย; j--) { อาร์เรย์[เจ + 1] = อาร์เรย์[เจ]; - อาร์เรย์[ซ้าย] = คีย์; - ส่งคืนอาร์เรย์; } อื่น { กลับ 'อาร์เรย์ไม่ใช่อาร์เรย์!'; - }
ฟังก์ชันการเรียงลำดับการเลือก SelectionSort(array) { ถ้า (Object.prototype.toString.call (array).slice (8, -1) === 'อาร์เรย์') { var len = array.length, อุณหภูมิ; สำหรับ (var i = 0; i <len - 1; i++) { var min = อาร์เรย์ [i]; สำหรับ (var j = i + 1; j <len; j++) { ถ้า (อาร์เรย์ [j] <นาที) { อุณหภูมิ = นาที; นาที = อาร์เรย์[เจ]; อาร์เรย์[j] = อุณหภูมิ; - - อาร์เรย์[i] = นาที; - ส่งคืนอาร์เรย์; } อื่น { กลับ 'อาร์เรย์ไม่ใช่อาร์เรย์!'; - }
ฟังก์ชันการเรียงลำดับบับเบิ้ล bubbleSort(array) { ถ้า (Object.prototype.toString.call (array).slice (8, -1) === 'อาร์เรย์') { var len = array.length, อุณหภูมิ; สำหรับ (var i = 0; i <len - 1; i++) { สำหรับ (var j = len - 1; j >= i; j--) { ถ้า (อาร์เรย์ [j] < อาร์เรย์ [j - 1]) { อุณหภูมิ = อาร์เรย์ [j]; อาร์เรย์[เจ] = อาร์เรย์[เจ - 1]; อาร์เรย์ [j - 1] = อุณหภูมิ; - - - ส่งคืนอาร์เรย์; } อื่น { กลับ 'อาร์เรย์ไม่ใช่อาร์เรย์!'; - }
// วิธีที่ 1 ฟังก์ชั่น QuickSort (อาร์เรย์, ซ้าย, ขวา) { ถ้า (Object.prototype.toString.call (array).slice (8, -1) === 'อาร์เรย์' && ประเภทซ้าย === 'หมายเลข' && ประเภทขวา === 'หมายเลข') { ถ้า (ซ้าย < ขวา) { var x = อาร์เรย์ [ขวา], i = ซ้าย - 1, อุณหภูมิ; สำหรับ (var j = ซ้าย; j <= ขวา; j++) { ถ้า (อาร์เรย์ [j] <= x) { ฉัน++; อุณหภูมิ = อาร์เรย์ [i]; อาร์เรย์[i] = อาร์เรย์[j]; อาร์เรย์[j] = อุณหภูมิ; - - QuickSort(อาร์เรย์, ซ้าย, i - 1); QuickSort(อาร์เรย์, i + 1, ขวา); - } อื่น { return 'อาร์เรย์ไม่ใช่อาร์เรย์หรือซ้ายหรือขวาไม่ใช่ตัวเลข!'; - - วาร์ aaa = [3, 5, 2, 9, 1]; QuickSort(aaa, 0, aaa.ความยาว - 1); console.log(aaa); //วิธีที่ 2 var QuickSort = function(arr) { ถ้า (arr.length <= 1) { กลับ arr; var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice (pivotIndex, 1) [0]; var ซ้าย = []; var ขวา = []; สำหรับ (var i = 0; i < arr.length; i++){ ถ้า (arr[i] <เดือย) { left.push(arr[i]); } อื่น { right.push(arr[i]); - - กลับ QuickSort(ซ้าย).concat([pivot], QuickSort(ขวา)); };
/*คำอธิบายวิธีการ: การเรียงลำดับฮีป @param array อาร์เรย์ที่จะเรียงลำดับ*/ ฟังก์ชั่น heapSort (อาร์เรย์) { ถ้า (Object.prototype.toString.call (array).slice (8, -1) === 'อาร์เรย์') { //สร้างฮีป var heapSize = array.length, temp; สำหรับ (var i = Math.floor(heapSize / 2); i >= 0; i--) { heapify(อาร์เรย์, i, heapSize); - // เรียงลำดับฮีปสำหรับ (var j = heapSize - 1; j >= 1; j--) { อุณหภูมิ = อาร์เรย์ [0]; อาร์เรย์[0] = อาร์เรย์[j]; อาร์เรย์[j] = อุณหภูมิ; heapify(อาร์เรย์, 0, --heapSize); - } อื่น { กลับ 'อาร์เรย์ไม่ใช่อาร์เรย์!'; - - /*คำอธิบายวิธีการ: รักษาคุณสมบัติของฮีป @param arr array @param x array subscript @param len ขนาดฮีป*/ ฟังก์ชั่น heapify (arr, x, len) { ถ้า (Object.prototype.toString.call(arr).slice(8, -1) === 'อาร์เรย์' && typeof x === 'หมายเลข') { var l = 2 * x, r = 2 * x + 1, ใหญ่ที่สุด = x, อุณหภูมิ; ถ้า (l < len && arr[l] > arr[ใหญ่ที่สุด]) { ใหญ่ที่สุด = ลิตร; - ถ้า (r < len && arr[r] > arr[ใหญ่ที่สุด]) { ใหญ่ที่สุด = r; - ถ้า (ใหญ่ที่สุด != x) { อุณหภูมิ = arr[x]; arr[x] = arr[ใหญ่ที่สุด]; arr[ใหญ่ที่สุด] = อุณหภูมิ; heapify(arr, ใหญ่ที่สุด, len); - } อื่น { return 'arr ไม่ใช่ Array หรือ x ไม่ใช่ตัวเลข!'; - }
โอเค หลังจากที่เราแก้ไขปัญหาการเรียงลำดับแล้ว ขณะนี้เรากำลังเผชิญกับปัญหาการขจัดข้อมูลซ้ำซ้อน อย่ากลัว ยังมีวิธีแก้ปัญหาอีกมากมาย โปรดอ่านต่อช้าๆ:
ที่ทำงาน เมื่อประมวลผลข้อมูล json ตัวอย่างเช่นเมื่อเรียงลำดับขนาดของผลิตภัณฑ์บางประเภทก็เป็นเรื่องปกติที่ผลิตภัณฑ์ต่างๆ จะมีขนาดเท่ากัน หากเราต้องการแปลงเป็นตารางเพื่อแสดงขนาดเหล่านี้ ฉันก็ไม่ควรทำซ้ำในที่นี้ ลงวิธีการสองสามอย่างเพื่อลบการซ้ำซ้อนออกจากอาร์เรย์เพื่อใช้อ้างอิง:
// วิธีที่ง่ายที่สุดในการลบการซ้ำซ้อนออกจากอาร์เรย์/* * สร้างอาร์เรย์ใหม่ สำรวจอาร์เรย์ขาเข้า และกดค่าลงในอาร์เรย์ใหม่หากไม่ได้อยู่ในอาร์เรย์ใหม่ * IE8 และต่ำกว่าไม่รองรับวิธี indexOf ของอาร์เรย์* */ ฟังก์ชั่น uniq (อาร์เรย์) { var temp = []; //อาร์เรย์ชั่วคราวใหม่สำหรับ (var i = 0; i < array.length; i++){ ถ้า (temp.indexOf (อาร์เรย์ [i]) == -1) { temp.push(อาร์เรย์[i]); - - อุณหภูมิกลับ; - วาร์ AA = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(uniq(aa));
/* * เร็วที่สุดและใช้พื้นที่มากที่สุด (พื้นที่แลกกับเวลา) - * วิธีการนี้ดำเนินการได้เร็วกว่าวิธีอื่น แต่ใช้หน่วยความจำมากกว่า * แนวคิดปัจจุบัน: สร้างวัตถุ js ใหม่และอาร์เรย์ใหม่ เมื่อสำรวจอาร์เรย์ขาเข้า ให้พิจารณาว่าค่านั้นเป็นคีย์ของวัตถุ js หรือไม่ * ถ้าไม่เช่นนั้น ให้เพิ่มคีย์ให้กับอ็อบเจ็กต์แล้วใส่ลงในอาร์เรย์ใหม่ * หมายเหตุ: เมื่อพิจารณาว่าเป็นคีย์อ็อบเจ็กต์ js หรือไม่ "toString()" จะถูกดำเนินการกับคีย์ขาเข้าโดยอัตโนมัติ * คีย์ที่แตกต่างกันอาจถูกเข้าใจผิดว่าเหมือนกัน เช่น n[val]--n[1], n["1"]; * เพื่อแก้ปัญหาข้างต้น คุณยังคงต้องเรียก "indexOf" - ฟังก์ชั่น uniq (อาร์เรย์) { var temp = {}, r = [], len = array.length, val, ประเภท; สำหรับ (var i = 0; i <len; i++) { วาล = อาร์เรย์ [i]; type = ประเภทของวาล; ถ้า (!temp[val]) { อุณหภูมิ [val] = [ประเภท]; r.push(วาล); } อื่นถ้า (temp[val].indexOf(type) < 0) { อุณหภูมิ [val] .push (ประเภท); r.push(วาล); - - กลับ r; - วาร์ AA = [1,2,"2",4,9,"a","a",2,3,5,6,5]; console.log(uniq(aa));
/* * จัดเรียงอาร์เรย์ขาเข้าเพื่อให้ค่าเดียวกันอยู่ติดกันหลังจากการเรียงลำดับ * จากนั้นเมื่อเดินทางข้ามเฉพาะค่าที่ไม่ซ้ำกับค่าก่อนหน้าเท่านั้นที่จะถูกเพิ่มลงในอาร์เรย์ใหม่ * จะรบกวนลำดับของอาเรย์เดิม* */ ฟังก์ชั่น uniq (อาร์เรย์) { อาร์เรย์.sort(); var temp=[อาร์เรย์[0]]; สำหรับ (var i = 1; i < array.length; i++){ ถ้า (อาร์เรย์ [i] !== อุณหภูมิ [temp.length-1]){ temp.push(อาร์เรย์[i]); - - อุณหภูมิกลับ; - วาร์ AA = [1,2,"2",4,9,"a","a",2,3,5,6,5]; console.log(uniq(aa));
/* - * คุณยังคงต้องเรียก "indexOf" และประสิทธิภาพก็คล้ายกับวิธีที่ 1 * แนวคิดในการนำไปปฏิบัติ: หากรายการที่ i-th ของอาเรย์ปัจจุบันปรากฏครั้งแรกในตำแหน่งอื่นที่ไม่ใช่ i * หมายความว่ารายการที่ i ถูกทำซ้ำและละเว้น มิฉะนั้น ให้เก็บอาร์เรย์ผลลัพธ์ - ฟังก์ชั่น uniq (อาร์เรย์) { อุณหภูมิ var = []; สำหรับ (var i = 0; i < array.length; i++) { //หากรายการที่ i-th ของอาร์เรย์ปัจจุบันปรากฏครั้งแรกที่ i ในอาร์เรย์ปัจจุบัน รายการนั้นจะถูกเก็บไว้ในอาร์เรย์ มิฉะนั้น จะหมายถึงรายการที่ซ้ำกัน if(array.indexOf(array[i]) == i) { temp.push (อาร์เรย์ [i]) - - อุณหภูมิกลับ; - วาร์ AA = [1,2,"2",4,9,"a","a",2,3,5,6,5]; console.log(uniq(aa));
// แนวคิด: รับค่าที่ถูกต้องที่สุดโดยไม่ซ้ำกันและนำไปไว้ในอาร์เรย์ใหม่ /* *วิธีการแนะนำ* * รหัสการใช้งานของวิธีการค่อนข้างเจ๋ง * แนวคิดในการนำไปปฏิบัติ: รับค่าที่ถูกต้องที่สุดโดยไม่มีการทำซ้ำและใส่ลงในอาร์เรย์ใหม่ * (เมื่อตรวจพบค่าที่ซ้ำกัน ให้ยุติการวนรอบปัจจุบันและเข้าสู่การตัดสินรอบถัดไปของการวนรอบระดับบนสุด) */ ฟังก์ชั่น uniq (อาร์เรย์) { อุณหภูมิ var = []; ดัชนี var = []; var l = array.length; สำหรับ (var i = 0; i < l; i ++) { สำหรับ(var j = i + 1; j < l; j++){ ถ้า (อาร์เรย์ [i] === อาร์เรย์ [j]) { ฉัน++; เจ = ฉัน; - - temp.push(อาร์เรย์[i]); ดัชนี.ผลักดัน(i); - console.log(ดัชนี); อุณหภูมิกลับ; - วาร์ AA = [1,2,2,3,5,3,6,5]; console.log(uniq(aa));
เมื่อเลือกแผนก คุณมักจะเห็นเมนูแผนผังประเภทนี้หรือไม่ โดยทั่วไปข้อมูลที่ส่งคืนจะเป็นแนวนอน โดยทั่วไปแล้วเราจะสร้างเมนูประเภทนี้ขึ้นมา โปรดดู~~
const dataTree = [ {id: 1 ชื่อ: 'สำนักงานใหญ่', parentId: 0}, {id: 2 ชื่อ: 'สาขาเซินเจิ้น', parentId: 1}, {id: 3 ชื่อ: 'สาขาปักกิ่ง', parentId: 1}, {id: 4 ชื่อ: 'แผนก R&D', parentId: 2}, {id: 5 ชื่อ: 'ฝ่ายการตลาด', parentId: 2}, {id: 6 ชื่อ: 'แผนกทดสอบ', parentId: 2}, {id: 7 ชื่อ: 'แผนกการเงิน', parentId: 2}, {id: 8 ชื่อ: 'ฝ่ายปฏิบัติการและบำรุงรักษา', parentId: 2}, {id: 9 ชื่อ: 'ฝ่ายการตลาด', parentId: 3}, {id: 10 ชื่อ: 'แผนกการเงิน', parentId: 3}, - ฟังก์ชั่น changeData (ข้อมูล, parentId = 0) { ให้ tree = [];//สร้างอาร์เรย์ว่าง//สำรวจข้อมูลแต่ละส่วน data.map((item) => { // parentId ในแต่ละข้อมูลจะเหมือนกับที่ส่งผ่าน if (item.parentId == parentId) { //เพียงมองหาเซ็ตย่อยขององค์ประกอบนี้เพื่อค้นหา parentId==item.id ในองค์ประกอบ ด้วยวิธีนี้ item.children = changeData(data, item.id); tree.push (รายการ); - - ต้นไม้กลับ - console.log(changeData(dataTree, 0));
เรามักจะพบการประมวลผลข้อมูลเมื่อแสดงแผนภูมิ และเรายังพบการรวมรายการเดียวกันของอาร์เรย์ด้วย ต่อไปนี้คือวิธีการผสานรายการเดียวกันของอาร์เรย์:
var arr = [ {"id": "1" "ชื่อ": "เชลิซี" "num": 245 "}, {"id": "1" "ชื่อ": "เชลิซี" "num": 360 "}, {"id": "2" "ชื่อ" "แอปเปิ้ล" "" num "120"} {"id": "2" "ชื่อ" "แอปเปิ้ล" "" num "360"} {"id": "2" "ชื่อ" "แอปเปิ้ล" "" num "180"} {"id": "3", "ชื่อ": "กล้วย", "num": 160"}, {"id": "4" "ชื่อ" "สับปะรด" "" num "180"} {"id": "4" "ชื่อ" "สับปะรด" "" num "240"} - แผนที่ var = {}, ผลลัพธ์ = []; สำหรับ (var i = 0; i < arr.length; i++){ วาเรล = arr[i]; ถ้า(!แผนที่[ele.id]){ ผลลัพธ์.ผลักดัน({ รหัส:ele.id, ชื่อ: ele.name, ค่า: ele.value - แผนที่ [ele.id] = เอเล; }อื่น{ สำหรับ (var j = 0; j < result.length; j++){ var dj = ผลลัพธ์ [j]; ถ้า (dj.id == ele.id){ dj.value=(parseFloat(dj.value) + parseFloat(ele.value)).toString(); หยุดพัก; - - - - console.log(ผลลัพธ์);