الأول هو طريقة أكثر تقليدية
فكرة:
1. بناء نتيجة تخزين صفيف جديدة
2. خذ عنصرًا من الصفيف الأصلي في الدورة ، قارن مع الصفيف مع دورة العنصر هذه مع نتيجة هذا العنصر
3. إذا لم يكن هناك عنصر من هذا القبيل في صفيف النتائج ، يتم تخزينه في الصفيف
نسخ رمز رمز على النحو التالي:
Array.Prototype.unique1 = function () {
var res = [this [0]] ؛
لـ (var i = 1 ؛ i <this.length ؛ i ++) {
var تكرار = خطأ ؛
لـ (var j = 0 ؛ j <res.length ؛ j ++) {
إذا (هذا [i] == res [j]) {
كرر = صحيح ؛
استراحة؛
}
}
إذا (! كرر) {
res.push (هذا [i]) ؛
}
}
عودة الدقة ؛
}
var arr = [1 ، 'a' ، 'a' ، 'b' ، 'd' ، 'e' ، 'e' ، 1 ، 0]
تنبيه (arr.unique1 ()) ؛
الطريقة الثانية أكثر كفاءة من الطريقة أعلاه
فكرة:
1. فرز الصفيف الأصلي أولاً
2.
3. إذا كان مختلفًا ، احفظ العنصر في صفيف النتيجة
نسخ رمز رمز على النحو التالي:
Array.Prototype.unique2 = function () {
this.sort () ؛
var res = [this [0]] ؛
لـ (var i = 1 ؛ i <this.length ؛ i ++) {
إذا (هذا [i]! == res.Length -1]) {
res.push (هذا [i]) ؛
}
}
عودة الدقة ؛
}
var arr = [1 ، 'a' ، 'a' ، 'b' ، 'd' ، 'e' ، 'e' ، 1 ، 0]
تنبيه (arr.unique2 ()) ؛
سيكون للطريقة الثانية أيضًا قيودًا معينة ، لأن الفرز قبل العائد ، يتم أيضًا فرز النتيجة الأخيرة للعودة الأخيرة. إذا كان ترتيب الصفيف مطلوبًا عدم تغيير الطلب ، فلا يمكن اتخاذ هذه الطريقة.
الطريقة الثالثة (الموصى بها)
فكرة:
1. إنشاء نتيجة تخزين صفيف جديدة
2. إنشاء كائن فارغ
3.
ملاحظة: أما بالنسبة لكيفية المقارنة ، خذ عنصرًا من الصفيف الأصلي ثم الوصول إلى هذه السمة في الكائن.
نسخ رمز رمز على النحو التالي:
Array.Prototype.Unique3 = function () {
var res = [] ؛
var json = {} ؛
لـ (var i = 0 ؛ i <this.length ؛ i ++) {
if (! json [this [i]]) {
res.push (هذا [i]) ؛
JSON [هذا [i]] = 1 ؛
}
}
عودة الدقة ؛
}
var arr = [112،112،34 ، 'hello' ، 112،112،34 ، 'hello' ، 'str' ، 'str1'] ؛
تنبيه (arr.unique3 ()) ؛