在JavaScript数组中对每个对象应用一个函数

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

你需要创建一个新的数组吗?你能否只调整原始数组? - epascarello
6
Array.prototype.map 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。const array1 = [1, 4, 9, 16]; // pass a function to map const map1 = array1.map(x => x * 2); console.log(map1); // expected output: Array [2, 8, 18, 32]map() 方法会给原数组中的每个元素都按顺序应用一次提供的函数,并返回一个新数组。提供的函数被传入三个参数:当前元素的值、当前元素的索引和数组本身。函数返回的值会插入到新数组中。注意:map() 不会修改调用它的原数组,而是返回一个新数组。 - Barmar
3
不要使用for...in循环来迭代数组! - Oriol
@epascarello 不,我不需要新的数组,我只需要调整原始数组。 - Zalaboza
2个回答

89

你可以使用Array.prototype.map

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

正如注释所说,这种方法会更改old_array。在回调函数中,您也可以返回一个新对象,而不改变原始数组。


5
注意,这会修改old_array中的对象。 - Oriol
@xdazz是正确的,你可以在这里自己看到。 - JustGage
显然,即使不包括 return e;,仍然得出相同的结果。此外,如果您有意更改 old_array,那么 var new array = 也是不必要的。因此,较短的版本是:old_array.map(function(e){ e.data = e.data.split(',') }); - ashleedawg

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

在这里,我们根据“,”拆分了“currentObject.data”,然后对所有拆分的字符串调用“Number”函数,以便您可以得到结果对象的“data”作为数字,正如您在问题中所需的一样。
输出:
[{
    name: 'hi',
    data: [1, 2, 3, 4, 5]
}, {
    name: 'hello',
    data: [5, 4, 3, 2, 1]
}]

let data = [{
    name: 'hi',
    data: '1,2,3,4,5'
  }, {
    name: 'hello',
    data: '5,4,3,2,1'
  }],
  result = data.map(function(currentObject) {
    return {
      name: currentObject.name,
      data: currentObject.data.split(",").map(Number)
    };
  });
console.log(result);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接