2013-07-10 3 views
4

Я использую массив для хранения ряда других массивов и разделения каждого сохраненного массива путем добавления «fin» в конце.Длина массива Javascript

Что меня бросает, это так; когда я показываю, что javascript считает длиной этого массива, он говорит, что массив имеет 603 элемента, тогда как в действительности массив содержит приблизительно 90 элементов. :-(

код с просьбой: -

// Declare the array 

var arrForAllData = new Array(); 

// Concatenate all the arrays to build the 'arrForAllData' array 

arrForAllData = arrApplicationData + ",fin," + arrCmdbIds + ",fin," + arrBaAvail + ",fin," + arrAppStatus + ",fin," + arrMaxAchieve + ",fin," + arrBreaches + ",fin," + arrMTTR + ",fin," + arrMTBF + ",fin," + arrMTBSI + ",fin," + arrCleanDays + ",fin," + arrHistBaAvail + ",fin," + arrHistBreaches + ",fin," + arrHistDuration; 

Я использую «плавник» в качестве разделителя для каждого массива, как я должен восстановить массивы позже, чтобы сохранить на том, чтобы сделать API вызовы повторно -create большая часть данных.

// Example array 

arrApplicationData contains 

Downstream,CIM,Eserve,FPS,Global,GSAP 

// Display the data in the arrForAllData 

alert("arrForAllData contains " + arrForAllData); 

Данное предупреждение отображает все элементы в массиве, как я ожидаю, все разделенные запятой.

// Calculate the length of the array 

var adlen = arrForAllData.length; 

alert("Number of elements in arrForAllData is " + adlen); 

Это предупреждение отображает «adlen» как 603, что, как я уже сказал ниже, является подсчетом всех отдельных символов.

По какой-то причине «array.length» подсчитывает каждый отдельный символ.

Кто-нибудь сталкивался с этим раньше, и если у вас есть, есть ли способ исправить это?

Заранее благодарим за ваше время.

+11

Добро пожаловать на ТАК! Отправьте свой код. – georg

+3

Как именно вы сохранили другие массивы? –

+4

Что вы сделали, это 'string.length', и вы получите отдельные символы. Но без кода я не могу указать вам в правильном направлении. –

ответ

3

Мы не объединяем массивы со строками, поскольку их отливают в строку. Вот что вам нужно:

var arrForAllData = new Array(
    arrApplicationData, 
    arrCmdbIds, 
    arrBaAvail, 
    arrAppStatus, 
    arrMaxAchieve, 
    arrBreaches, 
    arrMTTR, 
    arrMTBF, 
    arrMTBSI, 
    arrCleanDays, 
    arrHistBaAvail, 
    arrHistBreaches 
); 

// And now for existing array you can always add new item 
arrForAllData.push(arrHistDuration); 

// You access elements of array by their index 
var a = arrForAllData[5]; 
// 'a' is now holding the 'arrBreaches' as arrays are indexed from 0 

// You can iterate over array, for example to count all the items inside nested arrays 
var all_items_amount = 0; 
for(var i=0; i<arrForAllData.length; i++){ 
    all_items_amount += arrForAllData[i].length; 
} 
alert(arrForAllData.length); // This will alert the length of main array 
alert(all_items_amount); // This will alert the number of elements in all nested arrays 

В качестве альтернативы определения массива используется, массивы могут быть созданы с помощью:

var x = []; // Empty array 
var x = new Array(); // Empty array too 
var x = [a, b, c]; // Array with three items made of variables 'a', 'b' and 'c' 
var x = new Array(new object(), 'xxx', [], a); // Array with four items: 
// new instance of object, string 'xxx', new empty array and variable 'a' 
+0

Ваш последний пример состоит из четырех элементов: – Nick

+0

Hi ElmoVanKielmo - спасибо за код и спасибо за то, что нашли время, чтобы помочь мне. – steveg

+0

@ Ник, спасибо - CTRL + C Проблема CTRL + V: D – ElmoVanKielmo

Смежные вопросы