محاولة الانضمام إلى مجموعة ثنائية الأبعاد في جافا سكريبت
-
19-09-2019 - |
سؤال
أحاول تحويل صفيف ثنائي الأبعاد إلى سلسلة من أجل تخزينها في صفيف محلي. ومع ذلك، هناك خطأ ما في هذا الرمز لا يمكنني تحديده:
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);