عند إجراء عمليات الصفيف ، غالبًا ما تواجه مشكلة إزالة التكرارات. فيما يلي مقدمة موجزة لطريقة إلغاء البيانات المسلحة.
indexof decilectlication
Array.Prototype.Unique1 = function () {var arr = [] ؛ for (var i = 0 ؛ i <this.length ؛ i ++) {var item = this [i] ؛ if (arr.indexof (item) === -1) {arr.push (item) ؛}} return arr ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique1 () ؛ // [1 ، 2 ، 3 ، "4" ، 4 ، "34"]ومع ذلك ، بموجب IE6-8 ، لا توجد طريقة فهرس الصفيف بعد (على الرغم من أن هذا موضوع قديم بعض الشيء o (∩_∩) o ~) ، ولكن يتعين على المبرمجين كتابة طريقة فهرس:
var indexof = [] .indexof؟ function (arr ، item) {return arr.indexof (item) ؛}: function indexof (arr ، item) {for (var i = 0 ؛ i <arr.length ؛ i ++) {if (arr [i] === item) {return i ؛}} return -1 ؛} array.prototype.Unique2 = {var item = this [i] ؛ if (arr.indexof (item) === -1) {arr.push (item) ؛}} return arr ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique2 () ؛ // [1 ، 2 ، 3 ، "4" ، 4 ، "34"]يمكن أن يستخدم IndexOF أيضًا طريقة إعادة البناء هذه:
Array.Prototype.Unique3 = function () {var arr = [this [0]] ؛ لـ (var i = 1 ؛ i <this.length ؛ i ++) {if (this.indexof (this [i]) == i) {arr.push (this [i]) ؛}} return arr ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2]. // [1 ، 2 ، 3 ، "4" ، 4 ، "34"]التجزئة لإعادة التحميل
الفهرس أعلاه صحيح ، ولكن من حيث الأداء ، فإن الدورة المزدوجة ستقلل من الأداء. ثم نستخدم التجزئة.
Array.Prototype.unique4 = function () {var arr = [] arr ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique4 () ؛ // [1 ، 2 ، 3 ، "4" ، 4 ، "34"]جوهر هو بناء كائن التجزئة لاستبدال الفهرس. تغيير المساحة إلى الوقت. لاحظ أنه في JavaScript ، لا يمكن أن تكون القيمة الرئيسية للكائن سوى سلسلة (بالطبع ، توفر ES6 بنية بيانات الخريطة. إنها مشابهة لكائن ما ، وهي أيضًا مجموعة من أزواج القيمة الرئيسية ، ولكن يمكن اعتبار نطاق "المفتاح" أن يوفر "سلسلة الكائن". وهو تمثيل بنية التجزئة الأكثر اكتمالا.) ، لذلك هناك حاجة إلى مفتاح var = typeof (عنصر) + للتمييز بين القيمة 1 والسلسلة "1".
ثم إذا كنت تريد أن تعتبر "4" و 4 هي نفسها (النهج الأخرى هي نفسها)
Array.Prototype.unique5 = function () {var arr = [] arr ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique5 () ؛ // [1 ، 2 ، 3 ، "4" ، "34"]بعد الفرز ، إلغاء التكرار
Array.Prototype.unique6 = function () {this.sort () ؛ var arr = [this [0]] ؛ for (var i = 1 ؛ i <this.length ؛ i ++) {if (this [i]! == arr [arr.length-1]) {arr.push (this [i]) ؛}} arr ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique6 () ؛ // [1 ، 2 ، 3 ، "34" ، "4" ، 4]فرز المصفوفة أولاً ، ثم قارن قيمتين مجاورتين. عند الفرز ، استخدم طريقة JS الأصلية ، لذلك فهي سريعة جدًا. هناك عيب واحد فقط لهذه الطريقة. عند مقارنة الشخصيات ، يتم فرزها بترتيب ترميز الأحرف. لذلك سترى أن 10 تم تصنيفها أولاً في 2. ومع ذلك ، لن يؤثر على إزالة الوزن الثقيل. ومع ذلك ، لحل المشكلة من الفرز ، تقبل طريقة الفرز المعلمة ، وهي طريقة:
الدالة CORPARE (value1 ، value2) {if (value1 <value2) {return -1 ؛} else if (value1> value2) {return 1 ؛} else {return 0 ؛}} [1،2،5،2،10،3،20] .sort (مقارنة) ؛ // [1 ، 2 ، 2 ، 3 ، 5 ، 10 ، 20]تعيين لإعادة التحميل
يوفر ES6 مجموعة بنية بيانات جديدة. إنه مشابه لصفيف ، لكن قيم الأعضاء كلها فريدة من نوعها ، دون قيم مكررة. يتم الآن دعم المتصفح بالكامل ، ويتم دعم عقدة الخادم أيضًا.
Array.Prototype.unique7 = function () {return array.from (مجموعة جديدة (هذا)) ؛} [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique7 () ؛ // [1 ، 2 ، 3 ، "4" ، 4 ، "34"]مكتبة الطريقة
أوصت مكتبة Method Underscore.js ، والتي تحظى بشعبية كبيرة في العقدة أو المتصفح JS.
const _ = require ('Underscore') ؛ _. uniq ([1 ، 2 ، 1 ، 3 ، 1 ، 4]) ؛ // [1 ، 2 ، 3 ، 4]وقت الاختبار
يمكن اختبار جميع الطرق المذكورة أعلاه بطريقة بسيطة ، ثم قارن وتحديد أفضل الطرق:
console.time ("test") ؛ [1،2،3 ، '4' ، 3،4،3،1 ، '34 '، 2] .Unique7 () ؛ console.timeend ("test") ؛ ==> vm314: 3 test: 0.378msلجعل البيانات أكبر ، قم بإنشاء مليون رقم بشكل عشوائي:
var arr = []
ما سبق هو مصفوفة JavaScript Declication التي قدمها لك المحرر من البطيء إلى الصيام من المتوسط إلى البسيط. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!