2015-12-03 3 views
3

У меня есть строка данных [2], который в тесте «6766 44 9 19904 7772 13323 245 14 221» и пытается преобразовать его в массив, используя приведенный ниже кодполучение объекта вместо массива в JavaScript

console.log(typeof(data[2]),data[2].length,data[2]); 
con = data[2].trim().split("\\s+"); // i.e. 66 44 9 19904 7772 13323 245 14 221 
console.log(typeof(con),con.length,con); 

Но получение ниже объекта вместо этого, пожалуйста, советы

string 38 6766 44 9 19904 7772 13323 245 14 221 
object 1 ["6766 44 9 19904 7772 13323 245 14 221"] 
+4

Массивы объектов в JS и 'typeof' возвращает«объект»при тестировании массив. Как вы можете видеть, у вас есть массив. – Teemu

+1

И используйте Array.isArray (con) для проверки массива. Массивы являются объектами в JS. – AtheistP3ace

+1

Также 'typeof' ... специальный. –

ответ

4

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

con = data[2].trim().split("\\s+"); 

Может быть

con = data[2].trim().split(/\s+/); 
+1

" может быть "нет" должно быть " – epascarello

9

Вы пытаетесь использовать строку для разделения вместо регулярных выражений:

изменение .split("\\s+") к .split(/\s+/g).

Операция typeof вернет "object" для массивов, поэтому вы фактически видите массив с одним элементом, поэтому ваш счет ошибочен.

Если вы хотите проверить, если объект является массивом, используйте Array.isArray или для совместимости:

function isArray(arr) { 
    return Object.prototype.toString.call(arr) === '[object Array]'; 
} 
+1

Нужен ли флаг 'g' здесь? – axelduch

+1

@axelduch, возможно, нет, но я помню, что некоторые методы соответствуют только первому экземпляру, и это, по-видимому, случай, когда расщепление должно происходить во всех пространствах, поэтому флаг 'g' имеет смысл для меня. Я честно не проверял. – zzzzBov

+4

Сплит неявно глобально уже, но это верно для таких методов, как 'String.prototype.replace' – axelduch