2015-12-07 6 views
2
for(var i=0;i < obj.length; i++){ 
obj[i].split(","); 
} 

выше код дал мне раскол неопределен, это потому, что мой последний пункт OBJ является массив, который похож на этотизбежать, если массив пуст, чтобы избежать ошибок

[""] 

Как решить эту проблему?

+0

Что еще содержит массив? Номера или только строки/неопределенные? Может ли он содержать значения «null»? – Mottie

+1

Можете ли вы дать нам образец массива obj? Как вы сказали, последний элемент был массивом. Но в этом случае он должен возвращать .split - это не функция, не разбитая на undefined –

+0

Вам не нужно перебирать по всей длине ... Также ваше тело цикла не будет мутировать строки в вашем объекте. – Shashank

ответ

1

Итерация по пунктам, если и только он имеет тип строки и obj[i] является true value

var obj = ['', null, 100, undefined, 'abc,test']; 
 
for (var i = 0; i < obj.length; i++) { 
 
    if (typeof obj[i] === 'string' && obj[i]) { 
 
    var test = obj[i].split(","); 
 
    console.log(test); 
 
    } 
 
}

Fiddle here

0

Мне кажется, вы имеете в виду пустую строку, а не неопределенную, пожалуйста, исправьте меня, если я ошибаюсь. Если это «неопределенное» значение, отличное от пустой строки, предоставление того, что ваш список будет полезным. Если это действительно пустая строка, просто используйте условие if, чтобы пропустить ее.

for (i = 0; i < obj.length; i++) { 
    if (obj[i] != '') { 
     obj[i].split(','); 
    } 
} 
+0

Пустая строка не 'undefined' Я полагаю! – Rayon

+0

Это не сработает, потому что 'undefined! = ''' Is 'true' – Mottie

+0

Хм ...Я на самом деле предполагаю, что она означает пустую строку с ее выходом, когда я делаю быстрый тест, я получаю тот же результат, но я могу ошибаться. Я напишу это в своем ответе. – DataHerder

0

Если массив не содержит номера (например, ноль) или логические значения (как true), то вы можете сделать это:

for(var i = 0; i < obj.length; i++) { 
    (obj[i] || "").split(","); 
} 
0

Прежде всего, что вы делаете, не имеет с вашим кодом.

А именно;

var obj = { a : "there,are,commas", b : "no commas" } ; 
// next line of code doesnt do anything, 
//just returns undefined on console. 
obj["a"].split(","); 

Букет из неопределенных из-за этого факта. На консоли, конечно.

// if you want to use it, you might have assigned it to a variable 
var someVariable = obj["a"].split(","); 

Таким образом, ваша проблема может быть чем-то другим.

0

Вы должны вызывать toString в своем массиве или, что более заметно, делать все строкой, используя метод toString на obj [i].

var obj = ["23",[""]] 
for(var i=0;i < obj.length; i++){ 
    if(!obj[i].toString()==""){ 
    console.info(obj[i].split(",")); 
    } 
} 

Скриншот ниже для практических целей.

https://jsfiddle.net/stm0qemn/1/

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