将函数应用于JavaScript数组中的每个对象

时间:2015-04-21 15:44:02

标签: javascript arrays

[ {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);
}

2 个答案:

答案 0 :(得分:51)

您可以使用Array.prototype.map

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

正如评论所说,这样改变了old_array,你可以在回调函数中返回一个新对象而不改变原始数组。

答案 1 :(得分:17)

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

你可以使用data上的Array.prototype.map来构建一个新数组,就像这样

var result = data.map(function (currentObject) {
    return {
        name: currentObject.name,
        data: currentObject.data.split(",").map(Number)
    };
});

在这里,我们split currentObject.data基于,然后我们在所有拆分字符串上调用Number函数,以便您获得结果对象的data 1}}作为数字,正如你在问题中想要的那样。

<强>输出

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