javascript将函数应用于对象数组上的每个元素

Zal*_*oza 31 javascript arrays

[ {name:'hi',data:'1,2,3,4,5'} , {name:'hello',data:'5,4,3,2,1'} ]
Run Code Online (Sandbox Code Playgroud)

我需要的是对data数组中的每个对象应用拆分,以便得到结果

[ {name:'hi',data:[1,2,3,4,5]} , {name:'hello',data:[5,4,3,2,1]} ]
Run Code Online (Sandbox Code Playgroud)

我知道我可以为每个循环使用数组并生成一个新数组,但是有更好,更快的方法吗?

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);
}
Run Code Online (Sandbox Code Playgroud)

xda*_*azz 56

你可以使用Array.prototype.map:

var new_array = old_array.map(function(e) { 
  e.data = e.data.split(','); 
  return e;
});
Run Code Online (Sandbox Code Playgroud)

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

  • 注意这会修改`old_array`中的对象. (3认同)

the*_*eye 18

var data = [{
    name: 'hi',
    data: '1,2,3,4,5'
}, {
    name: 'hello',
    data: '5,4,3,2,1'
}];
Run Code Online (Sandbox Code Playgroud)

您可以使用Array.prototype.mapon data来构造一个新的Array,就像这样

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

在这里,我们splitcurrentObject.data基础上,,然后我们呼吁Number所有分割字符串的函数,这样你会得到结果对象的data数字,因为你在这个问题想.

产量

[{
    name: 'hi',
    data: [1, 2, 3, 4, 5]
}, {
    name: 'hello',
    data: [5, 4, 3, 2, 1]
}]
Run Code Online (Sandbox Code Playgroud)