Подтвердить что ты не робот

Применение функции к каждому объекту в массиве 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);
}
4b9b3361

Ответ 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]
}]