2012-04-12 3 views
1

У меня есть массив JS, который заполненные данные следующим образом:JavaScript: преобразование многомерного массива в два двумерный массив

var myarr = [[new Date("2011-12-01"), 389, 380.75, 382.54, 387.93], 
[new Date("2011-11-30"), 382.28, 378.3, 381.29, 382.2]...] 

Есть ли какой-нибудь способ выбрать только весь столбец даты и последний номер каждой строки? Я ищу выход, что-то вроде этого:

[[new Date("2011-12-01"), 387.93],[new Date("2011-11-30"), 382.2]...] 

ответ

1
var myCollapsedArr = [[myarr[0][0], myarr[0][myarr[0].length-1]], [myarr[1][0], myarr[1][myarr[1].length-1]]; 

Или в цикле:

var myCollapsedArr = []; 

for(var i = 0; i<myarr.length; i++) { 
    myCollapsedArr.push([myarr[i], [myarr[i][myarr[i].length-1]]); 
} 
+0

Обратите внимание, что это хорошая практика для кэширования длины вашего массива в настройке цикла, иначе вы каждый раз перечитываете его. Не большой удар по скорости, но никогда не плохая идея. 'for (var i = 0, len = myarr.length; i Phrogz

+0

Спасибо, Эллиот. Петля работала. Хотя я думал, что может быть какая-то функция, такая как срез, который делает это, не используя циклы. Ура! – Zishan

+0

@Phrogs: О, круто. Я это запомню. знак равно –

1

Вариант 1 - Простой цикл

// Create array to hold new values 
var newArray = []; 
// Loop through existing array and pull out data 
for(var i = 0; i < myarr.length; i++) { 
    newArray.push([myarr[i][0], myarr[i][myarr[i].length - 1]]); 
} 

Вот a working fiddle, чтобы продемонстрировать.

Вариант 2 - ECMAScript 5 forEach()

// Create array to hold new values 
var newArray = []; 

// Loop through existing array and pull out data 
myarr.forEach(function(obj) { 
    newArray.push([obj[0], obj[obj.length - 1]]); 
}); 

Вот a working fiddle продемонстрировать.