1. وفقًا لمبدأ المفتاح غير المتكرر في Key في كائن JS ، فإن طريقة تذكر الصفيف هي كما يلي وفقًا للتفكير التقليدي:
نسخ رمز رمز على النحو التالي:
وظيفة DimentArray (arr) {
var obj = {} ، temp = [] ؛
لـ (var i = 0 ؛ i <arr.length ؛ i ++) {
if (! obj [arr [i]]) {{
temp.push (arr [i]) ؛
OBJ [arr [i]] = true ؛
}
}
عودة درجة الحرارة.
}
var testarr = [1،2،3،2] ؛
console.log (Distorarray (testarr)) ؛
يبدو جيدًا ، ولكن إذا تحول إلى موقف:
var testarr1 = [1،2،3 ، "2"] ؛
console.log (Distorarray (testarr)) ؛
اتضح أن النتيجة هي نفس النتيجة. .
استجابة لما ورد أعلاه ، نقوم بتحسين الطرق المذكورة أعلاه:
نسخ رمز رمز على النحو التالي:
وظيفة dimentarrayimprove (arr) {
var obj = {} ، temp = [] ؛
لـ (var i = 0 ؛ i <arr.length ؛ i ++) {
if (! obj [typeof (arr [i])+arr [i]) {) {
temp.push (arr [i]) ؛
OBJ [typeof (arr [i])+arr [i]] = true ؛
}
}
عودة درجة الحرارة.
}
تضيف الطريقة أعلاه بادئة typeof عندما يتم وضع المفتاح في الكائن ، لذلك دعونا نرى التأثير.
var testarr1 = [1،2،3 ، "2"] ؛
console.log (Distorarray (testarr)) ؛
يصيح ، جيد! فهل هذه الوظيفة جيدة تمامًا ، دعنا نرى موقفًا آخر!
var testarr1 = [1،2،3 ، "2" ، {a: 1} ، {b: 1}] ؛
console.log (Distorarray (testarr)) ؛
هذه النتيجة ، كيفية حذف {B: 1} لحذفها بشكل غير مفهوم. .
2. في 1 في 1 ، فإن فكرتنا الرئيسية هي استخدام مفهوم المفتاح في كائن JS لتوجيه تفكيرنا ، ولكن في النهاية لا يوجد حل لجميع المشكلات. نريد
استخدم طرق الشريحة واللصق لتحقيق وزن الصفيف ، على النحو التالي:
نسخ رمز رمز على النحو التالي:
وظيفة distancerray2 (arr) {{
var test = arr.slice (0) ؛
لـ (var i = 0 ؛ i <temp.length ؛ i ++) {
لـ (j = i+1 ؛ j <temp.length ؛ j ++) {
if (temp [j] == temp [i]) {
Temp.Splice (J ، 1) ؛
ي --- ؛
}
}
}
عودة درجة الحرارة.
}
امتحان:
var testarr1 = [1،2،3 ، "2"] ؛
console.log (Distorarray (testarr)) ؛
var testarr2 = [1،2،2 ، {a: 1} ، {a: 1} ، {a: 1 ، b: 2} ، function () {Alert ("b") ؛} ، function () {ALERT ("B") ؛}] ؛؛
] ("ب") ؛}]
لا تزال نتائج الاختبار لا تلبي احتياجاتنا. بعد دراسة الأساليب المذكورة أعلاه لفريقنا ، وجدنا أن المشكلات الرئيسية في تشغيل الكائنين. على قدم المساواة.
نسخ رمز رمز على النحو التالي:
وظيفة distancerrayall (arr) {
var isequal = function (OBJ1 ، OBJ2) {{
// كائنين متساوين ، ويجب أن تساوي.
if (OBJ1 === OBJ2) {{
العودة الحقيقية.
}
if (typeof (obj1) == typeof (obj2)) {{
if (IBJ1) == "Object" && typeof (obj2) == "Object") {{
var pcount = 0 ؛
لـ (var p في OBJ1) {
PCount ++ ؛
if (! isequal (obj1 [p] ، obj2 [p]) {{
العودة كاذبة
}
}
لـ (var p في OBJ2) {
PCount- ؛
}
إرجاع pcount == 0 ؛
} آخر if (typeof (obj1) == "function" && typeof (obj2) == "function") {
if (OBJ1.TOSTRING () !! = OBJ2.TOSTRING ()) {
العودة كاذبة
}
} آخر {
if (obj1! = obj2) {{
العودة كاذبة
}
}
} آخر {
العودة كاذبة
}
العودة الحقيقية.
}
var test = arr.slice (0) ؛
لـ (var i = 0 ؛ i <temp.length ؛ i ++) {
لـ (j = i+1 ؛ j <temp.length ؛ j ++) {
ifqual (temp [j] ، temp [i]) {{) {{
Temp.Splice (J ، 1) ؛
ي --- ؛
}
}
}
عودة درجة الحرارة.
}
امتحان:
var testarr3 = [1،2،2 ، {a: 1} ، {a: 1} ، {a: 1 ، b: 2} ، function () {Alert ("b") ؛} ، function () {Alert ("B") ؛}] ؛؛
console.log (DistarArrayall (testarr3)) ؛
// النتائج [1،2 ، {a: 1} ، {a: 1 ، b: 2} ، function () {Alert ("b") ؛}]
عفوًا ، أكملت أخيرًا مهمة الوزن الثقيل. يمكننا أن نرى أن الطريقة الأخيرة هي التأكيد على القانون ، الذي يمكن أن يكون مهمًا للصفائف المعقدة ، لكن النفقات العامة المقابلة لها أيضًا في بعض الأحيان ما نحتاج إليه في تطوير المشروع الفعلي أو الأحرف الخالصة. ثقيل ، الأمر الذي يتطلب منا اختيار الخوارزمية المقابلة وفقًا للاحتياجات.