محاولة الانضمام إلى مجموعة ثنائية الأبعاد في جافا سكريبت

StackOverflow https://stackoverflow.com/questions/2016143

سؤال

أحاول تحويل صفيف ثنائي الأبعاد إلى سلسلة من أجل تخزينها في صفيف محلي. ومع ذلك، هناك خطأ ما في هذا الرمز لا يمكنني تحديده:

for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
localStorage[key] = string;

هل لدى أي شخص فكرة ما أفعله خطأ؟

أما بالنسبة إلى ما هو الخطأ، من خلال صفيف متعدد الأبعاد أعني الصفيف [0] [1] وما إلى ذلك عند الإدخال في LocalStorage، يتم تقليل جميع "السلسلة" إلى @، مما يعني على الجانب الآخر من @ لا تزال هناك صفائف لا تزال هناك صفائف.

هل كانت مفيدة؟

المحلول

ما هو الشيء الخطأ؟ بالتأكيد، أنت UCAN تقول ما هي مدخلاتك، ما كنت تتوقع، وما هو الناتج غير المرغوب فيه؟

على الأقل، إذا array هو في الواقع صفيف، يجب أن لا تستخدم for..in loop. وبعد هذا للكائنات. مجرد استخدام أ

for (var i=0, l=array.length; i<l; i++){
    if (array[i] instanceof Array){
        array[i] = array[i].join("`");
    }
}

نصائح أخرى

في الوقت الحاضر هذا بسيط مثل:

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4

JSON هو الآن قياسي في المتصفحات الحديثة. يمكنك استخدامه إلى "تحويل" (تحويل إلى سلسلة JSON) وتحويل "تحليل" من سلسلة JSON.

يمكنك استعمال ال JSON.stringify وظيفة لتحويل صفيف 2D الخاص بك إلى JSON والعصي localStorage. وبعد ثم يمكنك استخدام JSON.parse لتحويله مرة أخرى إلى صفيف.

var my2DArray = [[1, 2, 3], [4, 5, 6]];
var stringified = JSON.stringify(my2DArray);
localStorage[key] = stringified;

var backToOriginal = JSON.parse(localStorage[key]);

لا يحتوي JavaScript على صفائف ثنائية الأبعاد. لديها صفائف خشنة فقط. يعمل الرمز الخاص بك بالنسبة لي لإدخال مناسب:

array = [[1,2],[3,4]];
for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
alert(string);

انتاج:

1`2@3`4

هل يمكن أن تظهر لنا ما هي المدخلات التي تستخدمها وما خرج تحصل عليه؟

يبدو أن الكود الخاص بك يعمل بشكل جيد بالنسبة لي، واختبار في فايرفوكس.

هل فشل في متصفح معين؟

var array = [
["a","b"],
["c","d","e"]];
for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
console.log(string);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top