2016-10-20 2 views
0

Моя цель состоит в том, чтобы иметь множество массивов, para1, para2 .... para20 и находить все массивы с несколькими элементами в нем, а затем для доступа их. Например, я хочу, чтобы оператор if в цикле for, который в основном проверял все мои массивы, чтобы увидеть, какие из них имеют несколько элементов. Затем для тех, у которых есть несколько элементов, я бы использовал оператор if для извлечения определенного элемента из каждого массива.Проверка длины всех моих массивов в Javascript

var para1 = ["NB4-CAXL-14U-12-"]; 
var para2 = ["K"]; 
var para3 = ["-270°C to 1372°C, –454°F to 2501°F"]; 
var para4 = ['1/8"', '3/16"', '1/4"']; 
var para5 = ['6"', '12"', '18"']; 

for (var j = 1; j < 10; j++) { 
    var lenId = "para" + j; 
    console.log(lenId.length); 
} 

document.getElementById("demo").innerHTML = typeof lenId; 

я определил несколько массивов и сделал цикл, который генерирует переменный, которая была именем каждого из массивов, но когда я пошел, чтобы проверить длину массивов я понял, что они все 5, потому что lenId = "para1" - это всего лишь строка с 5 буквами в ней. Как я могу проверить para1, чтобы узнать, сколько элементов в массиве? Или есть лучший метод для проверки длины всех моих массивов, возможно, помещая их в один большой массив или что-то в этом роде? Любая помощь будет принята с благодарностью

+0

использование нескольких массивов измерений ... в основном массиве массивов – Liquidchrome

+0

@Liquidchrome - An ARRA y массивов, не является многомерным массивом. Две разные вещи. Смотрите: http://stackoverflow.com/questions/597720/what-are-the-differences-between-a-multidimensional-array-and-an-array-of-arrays – gravity

ответ

1

Поместите массивы в объекте:

//Initializing the object: 
 
var O = { 
 
    para1: ["NB4-CAXL-14U-12-"], 
 
    para2: ["K"], 
 
    para3: ["-270°C to 1372°C, –454°F to 2501°F"], 
 
    para4: ['1/8"', '3/16"', '1/4"'] 
 
}; 
 

 
//Adding a new key to the object: 
 
O.para5 = ['6"', '12"', '18"']; 
 

 
//Getting the object's keys and their lengths: 
 
for(var j in O) { 
 
    console.log(j + ': ' + O[j].length); 
 
} 
 

 
//Accessing an individual array element: 
 
console.log(O.para4[1]); //3/16" 
 

 
//Iterating through the object's array values using a for loop 
 
for(var j in O) { 
 
    for(var i = 0 ; i < O[j].length ; i++) { 
 
    console.log(j + ': Element ' + i + ': Value ' + O[j][i]); 
 
    } 
 
} 
 

 
//Iterating through the object's array values using forEach 
 
for(var j in O) { 
 
    O[j].forEach(function(val, i) { 
 
    console.log(j + ': Element ' + i + ': Value ' + val); 
 
    }); 
 
}

+0

Спасибо, что отлично работали. Но что это значит, если в консоли сказано: VM39 extensions :: schemaUtils: 112Uncaught Error: вызов формы runtime.connect (null,) не соответствует определению runtime.connect (необязательный string extensionId, необязательный объект connectInfo)? Единственное, что есть в моем коде, это цикл цикла, который у меня был в течение длительного времени и не изменился, поэтому я не знаю, что может его вызвать .. –

+0

Извините, это ново для меня. Вы используете это в расширении? –

+0

Я использую Jsfiddle –

0

Я бы идти вперед и бросать массивы в единый массив. Затем вы можете более легко выполнять операции над этим массивом, не беспокоясь о нумерации. Число неявно основано на индексе!

var paras = []; 
 
paras.push(["NB4-CAXL-14U-12-"]); 
 
paras.push(["K"]); 
 
paras.push(["-270°C to 1372°C, –454°F to 2501°F"]); 
 
paras.push(['1/8"', '3/16"', '1/4"']); 
 
paras.push(['6"', '12"', '18"']); 
 

 
paras.forEach(function(para) { 
 
    console.log(para.length); 
 
});

-1

Если массивы не создаются динамически и вы определяете их, как в вашем примере, лучший способ сделать это с помощью стандартного метода массива filter. Он принимает функцию как параметр, который возвращает boolean и указывает, должен ли элемент массива быть отфильтрован или нет. Вы хотите использовать его так:

var para1 = ['1', '2', '3']; 
var para2 = ['1']; 
var para3 = ['1', '2']; 

var arraysToFilter = [para1, para2, para3]; 

var filteredArray = arraysToFilter.filter(function (paraArray) { 

    // returns true if array has more than one element; 
    return paraArray.length > 1; 
}); 

Теперь filteredArray будет массив с двумя элементами - para1 и para3

0

Это не красиво, но это выглядит, как вы храните эти массивы в глобальном масштабе (на стороне клиента), так что технически можно обратиться к каждой переменной как свойство window:

for (var j = 1; j < 10; j++) { 
var lenId = "para" + j; 
console.log(window[lenId].length); 
} 
Смежные вопросы