2015-04-21 2 views
19
[ {name:'hi',data:'1,2,3,4,5'} , {name:'hello',data:'5,4,3,2,1'} ] 

то, что мне нужно, чтобы применить разделение на data каждого объекта в массиве, так что результат будетJavascript применить функцию к каждому элементу в массиве объектов

[ {name:'hi',data:[1,2,3,4,5]} , {name:'hello',data:[5,4,3,2,1]} ] 

я знаю, я могу цикл массив, использующий для каждого и создающий новый массив, но есть ли лучший, более быстрый метод?

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); 
} 
+0

вам нужно сделать новый массив ли? Можете ли вы просто настроить оригинал? – epascarello

+4

[Array.prototype.map] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) – Barmar

+2

Не используйте 'for ... in' loop итерации массивов! – Oriol

ответ

31

Вы можете использовать Array.prototype.map:

var new_array = old_array.map(function(e) { 
    e.data = e.data.split(','); 
    return e; 
}); 

Как комментарий говорит, таким образом изменить old_array, вы можете вернуть новый объект в функции обратного вызова, без изменения в исходном массиве.

+2

Обратите внимание, что это изменяет объекты в 'old_array'. – Oriol

+0

@xdazz прав, вы можете видеть сами [здесь] (http://jsbin.com/dorogobose/2/edit) – JustGage

14
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) 
    }; 
}); 

Здесь мы splitcurrentObject.data на основе ,, а затем мы называем Number функции на все расщепленные строках , так что вы получите data объект результата, как вы хотели в вопросе.

Выход

[{ 
    name: 'hi', 
    data: [1, 2, 3, 4, 5] 
}, { 
    name: 'hello', 
    data: [5, 4, 3, 2, 1] 
}] 
Смежные вопросы