存储对数组中数组的引用

时间:2013-12-06 17:41:11

标签: javascript arrays foreach

我有几个像这样的数组

var arr1 = ['name1', 'name2', 'name3']   //array of strings
var arr2 = ['name4', 'name5', 'name6']
var arr3 = [....]

现在我想将上面的每个字符串数组转换为像

这样的对象数组
arr1 = [{name: 'name1'}, {name:'name2'}, {name:'name3'}] 

与其他2个阵列类似

所以我想出了这个

var bigArray = [arr1, arr2, arr3]
bigArray.forEach(function(arr, index, bigArray) {
     bigArray[index] = arr.map(function(item) {       // here i am assigning to current element of bigArray
     return {
           name: item
           };
     });
});

正如您在forEach上执行bigArray时看到的那样,我通过地图修改了每个数组(arr1arr2,...)。

在此forEach之后,bigArray看起来像

[
   [{name: 'name1'}, {name:'name2'}, {name:'name3'}],
   [{name: 'name4'}, {name:'name5'}, {name:'name6'}],
   ....
]

arr1仍为['name1', 'name2', 'name3']arr2仍为['name4', 'name5', 'name6']

我在此理解的是bigArray不包含对arr1arr2的引用,....任何想法我如何传递引用?或者我错过了其他什么?

编辑:我想我无法清楚地解释自己,所以这里是-------- 我创建bigArray的原因是我有太多的arr1arr2,...所以我不想去为每个这些单独应用地图所以我把它们放在我身上名为bigArray的大数组并在其上执行forEach

3 个答案:

答案 0 :(得分:2)

map方法就是你想要的;这会创建一个新数组,这就是您看到结果的原因。

var arr1 = ['name1', 'name2', 'name3']; 

var arrNames = arr1.map(function(nm){ return { name: nm }; });

这是DEMO

同样,map不会修改有问题的数组,这就是为什么在您的示例中未更改arr1的原因。它只是数组映射到一个新数组,然后返回它。

如果您想更改相关数组,您需要执行以下操作:

var arr1 = ['name1', 'name2', 'name3'];
arr1 = arr1.map(function(nm){ return { name: nm }; });

var arr2 ....

然后让bigArray包含对arr1,arr2和arr3的引用,你只需创建bigArray,其中包含对这些数组的引用,经过正确定义

var bigArray = [arr1, arr2, arr3]

上次修改

如果你真的只想保存一些击键,你可以这样做:

var arr1 = mapThis(['name1', 'name2', 'name3']);
var arr2 = mapThis(...
//and so on

function mapThis(arr){
    return arr.map(function(nm){ return { name: nm }; });
}

这将从一开始就正确地创建所有的arrX数组,而不会有太多额外的击键。

答案 1 :(得分:0)

没有地图的解决方案。它适用于所有浏览器。

var arr1 = ['name1', 'name2', 'name3'];
var arr2 = [], i;

while(i = arr1.shift()) {
    arr2.push({"name": i});
}
arr1 = arr2;

答案 2 :(得分:0)

根据MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)的文档,地图函数Creates a new array with the results of calling a provided function on every element in this array.您无法使用map()本身对原始数组进行操作,因此您需要指定{的结果{1}}到map()或其他数组,并使用您需要进行更改的数组。

你可以做这样的事情,没有arr1推送大量数组:

map()