2014-11-25 2 views
0

Я новичок в javascript, и у меня проблема с litle.Изменить структуру массива JS

У меня есть это:

[ 
    { 
    "date": "2014-04-23 00:00:00", 
    "volumetrie": "22458" 
    }, 
    { 
    "date": "2014-05-02 00:00:00", 
    "volumetrie": "30585" 
    }, 
    { 
    "date": "2014-03-27 00:00:00", 
    "volumetrie": "49536" 
    } 
] 

И я хотел бы это:

[ 
    { 
    "x": "2014-04-23T22:00:00.000Z", 
    "y": 22458 
    }, 
    { 
    "x": "2014-05-02T22:00:00.000Z", 
    "y": 30585 
    }, 
    { 
    "x": "2014-03-27T22:00:00.000Z", 
    "y": 49536 
    } 
] 

Есть ли у вас какие-нибудь идеи? Большое спасибо для вас в будущем ответ;)

+1

Не являются ли даты в результирующем массиве обязательными для ISO-строк? – xbug

+1

Хотя вопрос теперь закрыт как дубликат, если вы ищете точный ответ, используйте новую дату (<строка даты здесь>). ToISOString(), чтобы преобразовать дату в требуемый формат. –

ответ

3

Вы можете сделать это

var origArr = [{"date": "2014-04-23 00:00:00","volumetrie": "22458"},{"date": "2014-05-02 00:00:00","volumetrie": "30585"},{"date": "2014-03-27 00:00:00","volumetrie": "49536"}]; 

forEach в цикле по элементам массива и создать свой собственный

var modifArr = []; 

origArr.forEach(function(elem){ 
    modifArr.push({ x : (new Date(elem.date)).toISOString(), y : elem.volumetrie }) 
}); 

console.log(modifArr); // the array that you need 

Или map

var modifArr = origArr.map(function(elem){ 
    return { x : (new Date(elem.date)).toISOString(), y : elem.volumetrie } 
}); 

console.log(modifArr); 

или jQuery's each

var modifArr = []; 

$(origArr).each(function(index, elem){ 
    modifArr.push({ x : (new Date(elem.date)).toISOString(), y : elem.volumetrie }) 
}); 

console.log(modifArr); 
+0

Пожалуйста, не используйте jQuery для таких вещей. – pablochan

+1

@pablochan Похоже, что 'forEach' недоступен в IE8, поэтому jQuery будет разумной альтернативой, если вам нужно это поддержать. Тем не менее, самая большая причина использовать jQuery для меня - это обрабатывать старые браузеры - разумный процент пользователей по-прежнему находится на IE8. –

+0

@JoeEnos Снежный ответ будет «Пожалуйста, не поддерживайте IE8», но я этого не скажу. Я соглашусь, что если у вас уже есть jQuery для других вещей, использование этого не так уж плохо. – pablochan

4

Использование Array.map:

var arr = [ 
    { 
    "date": "2014-04-23 00:00:00", 
    "volumetrie": "22458" 
    }, 
    { 
    "date": "2014-05-02 00:00:00", 
    "volumetrie": "30585" 
    }, 
    { 
    "date": "2014-03-27 00:00:00", 
    "volumetrie": "49536" 
    } 
]; 

var newArr = arr.map(function(item){ 
    return {x: item.date, y: item.volumetrie}; 
}); 
+0

Следите за совместимостью браузера для этого - IE8, по-видимому, не поддерживается - вам придется написать свою собственную карту или использовать что-то вроде [jQuery] (http://api.jquery.com /jQuery.map/), если вам нужно его поддерживать. –

0

Использование map(). Пример:

var test = [ 
    { 
     "date": "2014-04-23 00:00:00", 
     "volumetrie": "22458" 
    }, 
    { 
     "date": "2014-05-02 00:00:00", 
     "volumetrie": "30585" 
    }, 
    { 
     "date": "2014-03-27 00:00:00", 
     "volumetrie": "49536" 
    } 
]; 
var newArr = test.map(function(key){ 
    return {x: key.date, y: key.volumetrie}; 
}); 
console.log(newArr); 
Смежные вопросы