2014-09-23 2 views
1

Я возвращаю большой объект JSON, и каждый элемент в определенном разделе является строкой. Мне нужно иметь возможность конвертировать все из них в поплавки.Как преобразовать многомерный массив строк в поплавки с помощью jQuery?

Как в настоящее время массив:

[ 
    ["1402408800","0.0"], 
    ["1402408800","0.0"], 
    ["1402408800","0.0"], 
] 

Как это должно быть после преобразования:

[ 
    [1402408800,0.0], 
    [1402408800,0.0], 
    [1402408800,0.0], 
] 

Я могу ссылаться на этот массив с v.PriceHistory, так что я делал попытку следующие:

var newArr = []; 
for (var i = 0; i < v.PriceHistory.length; i++) { 
    parseFloat(v.PriceHistory[i]); 
    newArr += v.PriceHistory[i]; 
} 

Хотя приведенное выше просто возвращает все это как отдельный массив и не возвращается в исходный формат.

Пробовал несколько вещей и смотрел онлайн, но не было никаких преобразований многомерного массива.

+0

я добавил еще общее решение –

ответ

3

Поскольку вы уже используете JQuery, вы можете использовать map() изменить все элементы в массиве:

var a = [ 
    ["1402408800","0.0"], 
    ["1402408800","0.0"], 
    ["1402408800","0.0"], 
]; 

a = a.map(function(elem) { 
    return elem.map(function(elem2) { 
     return parseFloat(elem2); 
    }); 
}); 

Вот совершенно общая функция, которая работает для любого п-мерного массива:

(function(elem) { 
    var callee = arguments.callee; 
    return elem instanceof Array ? elem.map(function(elem2) { return callee(elem2); }) 
           : parseFloat(elem); 
}) 
(["1", "2", ["10", "20", ["100", "200"], "30"]]); 

Если скопировать и вставить в консоль, вы увидите результат:

[1, 2, [10, 20, [100, 200], 30]] 
1

Итерация над большим объектом (первый сегмент кода в вашем сообщении) и установка второго элемента текущего массива в анализируемое значение.

Пример кода (где l является большой объект):

for (var i = 0; i < l.length; ++i) { 
    l[i][1] = parseFloat(l[i][1]); 
} 

JSFiddle

+0

немного расплывчато. Не могли бы вы представить образец того, что вы пытаетесь объяснить? – Fizzix

+0

Я заменяю строковое значение внутри массива (массив, который вы показываете в первом сегменте кода вашего сообщения) со значением, которое получается после вызова 'parseFloat' на строковое значение. (также добавили скрипку для вас) – The6P4C

+0

Работы, немного. Все еще оставляет индекс 0 в виде строки. Проверьте консоль: '0:" 1402408800 ", 1: 0' – Fizzix

0

насчет этого:

var newArr = []; 
for (var i = 0; i < v.PriceHistory.length; i++) { 
    newArr[i] = []; 
    for (var k = 0; k < v.PriceHistory[i].length; k++) { 
    newArr[i].push(parseFloat(Price[i][k])); 
    } 
} 

делает эту работу?

+0

Возвращает очень запутанный массив. – Fizzix

1

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

var yourArray = /*YOUR ARRAY*/; 
var newArray = []; 
for (var i = 0; i < yourArray.length; i++) { 
    var currentArray = yourArray[i]; 
    for (var j = 0; j < currentArray.length; j++) { 
     if(!newArray[i]){ 
      newArray[i]=[]; 
     } 
     newArray[i][j] = parseFloat(currentArray[j], 10); 
    } 
} 
console.log(newArray); 
+0

Получение ошибки: 'Uncaught TypeError: Невозможно установить свойство '0' неопределенного'.Случается в 'newArray [i] [j] = parseFloat (yourArray [i] [j], 10);'. – Fizzix

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