1. indexof และ lastindexof วิธีการ:
เนื่องจาก IE7 จะรายงานข้อผิดพลาดโดยใช้ดัชนีของวัตถุอาร์เรย์จึงจำเป็นต้องเขียนความเข้ากันได้ใหม่
การคัดลอกรหัสมีดังนี้:
array.prototype.lastindexof (รายการ, ดัชนี) {
var n = this.length, i = (index == null || index> n-1)? n-1: ดัชนี;
ถ้า (i <0) i = n+i;
สำหรับ (; i> = 0; i--)
ถ้า (นี่ [i] === รายการ) // การตัดสิน consolidar, indexof, lastindexof
กลับฉัน;
กลับ -1;
-
2. วิธีการแบบ shuffle: สลับอาร์เรย์
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น Shuffle (เป้าหมาย) {
var i = target.length, j, temp;
สำหรับ (; i> 0; j = parseint (math.random () * i), x = เป้าหมาย [-i], เป้าหมาย [i] = เป้าหมาย [j], เป้าหมาย [j] = x) {}
// สมมติว่าความยาว = 10 จากนั้นหลังจาก Math.random ()*10-> [0,10), ParseInt, [0,9], สุ่มเลือกหนึ่งและแลกเปลี่ยนกับรายการสุดท้ายในอาร์เรย์ ลูปที่สอง [0,8] แลกเปลี่ยนกับระยะสุดท้ายของอาร์เรย์
เป้าหมายกลับ;
-
3. กระบวนการแบนของอาร์เรย์: แบน, ส่งคืนอาร์เรย์หนึ่งมิติ
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นแบน (arr) {
var result = [];
arr.foreach (ฟังก์ชั่น (รายการ) {
if (array.isarray (item)) result.concat (flatten (item));
else result.push (รายการ);
-
ผลการกลับมา;
-
4. วิธีที่ไม่ซ้ำกัน: การดำเนินการซ้ำซ้อนของอาร์เรย์
วิธีนี้คือผู้สัมภาษณ์ชอบถามเพราะมีวิธีการใช้งานหลายวิธีวิธีที่พบมากที่สุดคือสองสำหรับลูป สิ่งที่พบบ่อยที่สุดที่ฉันรู้คือการใช้วัตถุ A และจากนั้น A for for loop array arr ทุกครั้งถ้า (A [arr [i]]) มีอยู่และถ้ามันไม่มีอยู่มันจะถูกผลักเข้าไปในผลลัพธ์อาร์เรย์ที่กำหนดใหม่ของคุณ การดำรงอยู่พิสูจน์การทำซ้ำดังนั้นจึงไม่จำเป็นต้องผลักดันผลลัพธ์ โซลูชันนี้สำหรับ "123", 123 จะได้รับการพิจารณาเหมือนกัน ในความเป็นจริงหนึ่งคือสตริงและอีกอันคือตัวเลขและไม่ควรพิจารณาเหมือนกัน
ดังนั้นวิธีการต่อไปนี้จะปรากฏขึ้น: [1, "1", "1"]
การคัดลอกรหัสมีดังนี้:
if ((typeof obj [array [i]])! = (typeof array [i]) || obj [array [i]]! = array [i]) {
A.push (อาร์เรย์ [i]);
obj [array [i]] = array [i];
-
// ก่อนอื่นตรวจสอบว่าประเภทนั้นเหมือนกันหรือไม่ หากพวกเขาเหมือนกันให้พิจารณาว่าค่าของพวกเขาเท่ากันหรือไม่ หากพวกเขาไม่เท่ากันพวกเขาจะได้รับการบันทึก หากพวกเขาเท่ากันพวกเขาจะพิสูจน์ว่าค่านี้มีอยู่ก่อนหน้านี้
หากประเภทแตกต่างกันมีสองสถานการณ์ที่นี่
ในกรณีแรก OBJ ได้บันทึกข้อมูลนี้มาก่อนเช่น: OBJ [123] = 123 ตอนนี้อาร์เรย์ [i] = "123" ในเวลานี้ typeof obj [array [i]]) เป็นตัวเลขและ typeof array [i] เป็นสตริงดังนั้นจึงถูกเก็บไว้ในอาร์เรย์
กรณีที่สองคือ OBJ ยังไม่ได้บันทึกข้อมูลนี้เช่น: Array [i] = "123", OBJ ["123"] = ไม่ได้กำหนด ในเวลานี้ typeof obj [array [i]]) เป็น typeof undefined = undefined ซึ่งไม่เท่ากับ typeof array [i] และถูกเก็บไว้ในอาร์เรย์
วิธีนี้สามารถแก้สถานการณ์ที่สตริงและตัวเลขเหมือนกัน แต่ไม่สามารถแก้สถานการณ์ที่วัตถุเหมือนกัน ตัวอย่างเช่น: a = {1: 2}, b = {2: 1};
เมื่อลูปแรกประเภทของ OBJ [A] = ไม่ได้กำหนด Typeof A = วัตถุ ฝาก obj [a] = a ในความเป็นจริง obj [วัตถุ] = a;
ในลูปที่สอง typeof obj [b] เท่ากับ typeof obj [object] ซึ่งจริง ๆ แล้ว typeof a = object, typeof b = วัตถุ ดังนั้นจึงเข้าสู่ obj [array [i]]! = array [i] | นั่นคือ obj [b]-> obj [object]-> a! = B, ฝากดังนั้น
obj [b] = b; นั่นคือ obj [วัตถุ] = b; เขียนทับ OBJ ก่อนหน้านี้ [Object] = A;
ในกรณีนี้วัตถุทั้งหมดจะปรากฏขึ้นและเฉพาะค่าวัตถุสุดท้ายเท่านั้นที่จะถูกเก็บไว้
เมื่อพิจารณาวัตถุฉันใช้วิธีการต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
สำหรับ (var i = 0; i <temp.length; i ++) {
สำหรับ (var j = i+1; j <temp.length; j ++) {
if (temp [i] === temp [j]) {
Temp.splice (J, 1);
J--;
-
-
-
กลับอุณหภูมิ;
5. การเรียงลำดับอาร์เรย์: วิธีการเรียงลำดับ หากวัตถุที่คุณต้องการเรียงลำดับเป็นวัตถุคุณสามารถเขียนเปรียบเทียบ (a, b) {ถ้า (a.age> b.age) ส่งคืน 1; else return -1;}, a.sort (เปรียบเทียบ)
6. นาทีส่งคืนค่าต่ำสุดของอาร์เรย์: return math.min.apply (0, อาร์เรย์);
7. Unshift ไม่คืนความยาวอาร์เรย์ภายใต้ IE6,7
การคัดลอกรหัสมีดังนี้:
if ([]. Unshift (1)! == 1) // เพิ่มรายการจากอันก่อนหน้าไปยังอาร์เรย์ที่ว่างเปล่าเบราว์เซอร์อื่นจะกลับมา 1 ในขณะที่ IE6 และ 7 จะไม่คืนความยาวอาร์เรย์ ดำเนินการคำสั่ง IF
-
var _unshift = array.prototype.unshift; // ฟังก์ชั่นการจี้
array.prototype.unshift = function () {
_unshift.apply (นี่, อาร์กิวเมนต์);
ส่งคืนสิ่งนี้ความยาว;
-
-
8.SPLICE ในกรณีของพารามิเตอร์หนึ่งพารามิเตอร์ที่สองเริ่มต้นของ IE8 และเวอร์ชันต่อไปนี้คือ 0 ในขณะที่เบราว์เซอร์อื่น ๆ มีความยาวอาร์เรย์
การคัดลอกรหัสมีดังนี้:
if ([1,2,3] .splice (1) .length == 0) // ie8 และเวอร์ชันต่อไปนี้จะเท่ากับ 0 และเวอร์ชันอื่น ๆ จะเท่ากับ 3 ให้ป้อนถ้า
-
var _splice = array.prototype.splice;
array.prototype.splice = function (a) {
if (arguments.length == 1) // หากมีพารามิเตอร์เดียวเท่านั้น
-
return _splice.call (this, a, this.length);
}อื่น{
return _splice.apply (นี่, อาร์กิวเมนต์);
-
-
-
วิธีนี้จะเปลี่ยนตัวเลือกของอาร์เรย์ดังนั้นควรผลักดันป๊อปกะและการไม่เปลี่ยนรูปแบบ (วิธีการเหล่านี้จะแก้ไขตัวเลือกของอาร์เรย์) จะเรียกวิธีนี้เพื่อนำไปใช้
นี่คือสถานที่ที่ควรทราบ:
การคัดลอกรหัสมีดังนี้:
var color = new Array ('Red', 'Blue', 'Yellow', 'Black');
var color2 = color.splice (2,0, 'สีน้ำตาล', 'สีชมพู');
การแจ้งเตือน (สี); // สีแดง, น้ำเงิน, น้ำตาล, ชมพู, สีเหลือง, ดำ, ตัวเลือกสีเหลือง, เริ่มต้นการทำงาน, หากลบคือ 0 ตัวเลือกที่เพิ่มจะถูกแทรกก่อนสีเหลือง จดจำ.
ที่นี่โปรดตรวจสอบความแตกต่างระหว่างประกบและชิ้นค่าคืนและผลกระทบต่ออาร์เรย์ดั้งเดิม
ข้างต้นเป็นเวอร์ชันที่เรียบง่ายของเนื้อหาของส่วนนี้ แม้ว่าจะมีความคล่องตัว แต่ประเด็นสำคัญก็คือทั้งหมด ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคนเมื่ออ่านส่วนนี้