Применение функции к каждому объекту в массиве JavaScript
[ {name:'hi',data:'1,2,3,4,5'} , {name:'hello',data:'5,4,3,2,1'} ]
Что мне нужно, это применить разбивку на data
каждого объекта в массиве, чтобы результат был:
[ {name:'hi',data:[1,2,3,4,5]} , {name:'hello',data:[5,4,3,2,1]} ]
Я знаю, что могу циклически использовать массив for each
и создать новый массив, но есть ли лучший, более быстрый метод?
var arr = [{
name: 'hi',
data: '1,2,3,4,5'
}, {
name: 'hello',
data: '5,4,3,2,1'
}];
var new_arr = [];
for (i in arr) {
var temp = {};
temp.name = arr[i].name;
temp.data = arr[i].data.split(',');
new_arr.push(temp);
}
Ответы
Ответ 1
Вы можете использовать Array.prototype.map:
var new_array = old_array.map(function(e) {
e.data = e.data.split(',');
return e;
});
Как говорится в комментарии, таким образом измените old_array
, вы можете вернуть новый объект в функцию обратного вызова без изменения исходного массива.
Ответ 2
var data = [{
name: 'hi',
data: '1,2,3,4,5'
}, {
name: 'hello',
data: '5,4,3,2,1'
}];
Вы можете использовать Array.prototype.map
в data
для создания нового массива, например,
var result = data.map(function (currentObject) {
return {
name: currentObject.name,
data: currentObject.data.split(",").map(Number)
};
});
Здесь split
currentObject.data
на основе ,
, а затем мы вызываем функцию Number
для всех разделенных строк, чтобы вы получили объект результата data
как числа, как вы хотели в вопрос.
Выход
[{
name: 'hi',
data: [1, 2, 3, 4, 5]
}, {
name: 'hello',
data: [5, 4, 3, 2, 1]
}]