2016-08-01 3 views
0

У меня есть яваскрипт массив как этотJavascript массива двухмерного массива

var myArr = [ 

    { 
     "Year":"2015", 
     "Month":"January", 
     "Value":"15.8", 
     "District":"Anuradhapura", 
     "type":"Rainfall" 
    }, 
    { 
     "Year":"2015", 
     "Month":"January", 
     "Value":"31.1", 
     "District":"Anuradhapura", 
     "type":"Temparature" 
    }, 
    { 
     "Year":"2015", 
     "Month":"January", 
     "Value":"4", 
     "District":"Anuradhapura", 
     "type":"Wind" 
    }, 
    { 
     "Year":"2015", 
     "Month":"January", 
     "Value":"69", 
     "District":"Anuradhapura", 
     "type":"Humidity" 
    } 
] 

то, что мне нужно, чтобы положить type и Value данные в 2 размерности массива. мой конечный результат должен быть таким;

var data = [ 
     [ 
      "Rainfall", 
      158 
     ], 
     [ 
      "Temparature", 
      31.1 
     ], 
     [ 
      "Wind", 
      4 
     ], 
     [ 
      "Humidity", 
      69 
     ] 
    ] 

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

ответ

5

Попробуйте это:

С foreach функция

Документация:Array.forEach

var data = []; 

myArr.forEach(x => data.push([x.type, parseFloat(x.Value)])) 

С map функция

Документация:Array.Map

var data = myArr.map(x => [x.type, parseFloat(x.Value)]); 
+0

хотя вы должны добавить еще преобразовать x.Value к числовому значению , :) –

+0

@winner_joiner спасибо –

5

Вы можете просто использовать Array.map функцию для отображения массив объектов для двумерного массива.

var data = myArr.map(function(o){ 
     return [o.type, o.Value] 
    }); 

Кроме того, если вы хотите значение, которое будет преобразовано в float числа вместо string, делают это с pasreFloat

var data = myArr.map(function(o){ 
     return [o.type, pasreFloat(o.Value)] 
    }); 
+1

Не быть nitpicky, но в одном из его числа есть float, поэтому вы должны использовать paraeFloat – Jay

+0

@Wade .. спасибо, что заметили –

2

Вы можете использовать Arrays.map функцию, чтобы получить результат:

 var data = myArr.map(function(input){ return [input.type, input.Value]; }); 

Эта функция преобразует каждый элемент вашего массива в другой элемент, потому что вам нужен массив массивов, ваш mappin g функция должна создать массив из объекта.

1
let data = []; 
myArr.map(a => { 

data.push([a.type, a.Value]); 

}); 
+0

с помощью отдельного массива не нужно, так как функция map будет " создать "свое собственное. –

-1

Я знаком с underscore.js: вы можете использовать:

_.zip(_.pluck(myArr, "type"), _.pluck(myArr, "Value")); 

var myArr = [ 
 

 
    { 
 
     "Year":"2015", 
 
     "Month":"January", 
 
     "Value":"15.8", 
 
     "District":"Anuradhapura", 
 
     "type":"Rainfall" 
 
    }, 
 
    { 
 
     "Year":"2015", 
 
     "Month":"January", 
 
     "Value":"31.1", 
 
     "District":"Anuradhapura", 
 
     "type":"Temparature" 
 
    }, 
 
    { 
 
     "Year":"2015", 
 
     "Month":"January", 
 
     "Value":"4", 
 
     "District":"Anuradhapura", 
 
     "type":"Wind" 
 
    }, 
 
    { 
 
     "Year":"2015", 
 
     "Month":"January", 
 
     "Value":"69", 
 
     "District":"Anuradhapura", 
 
     "type":"Humidity" 
 
    } 
 
]; 
 

 

 
alert(JSON.stringify(_.zip(_.pluck(myArr, "type"), _.pluck(myArr, "Value"))));
<script src="http://underscorejs.org/underscore-min.js"></script>

+2

Использование внешней библиотеки является излишним, если функция существует в ядре языка. https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map –

+0

underscore - обязательная библиотека, и это помогает манипулировать json. скорость и эффективность функций бывают быстрыми. и очень легкий вес. остальное ваше предложение заметно –

+1

У вас есть точка I, я просто рассматривал проблему изолированно. Кстати.поддержка JSON выросла в большинстве браузеров, проверьте эту ссылку https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON. И просто чтобы сделать аргумент для основных функций javascipt 5.7kb vs 0 kb. -> 0k больше «светлее» ;-) –

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