在数组中存储对数组的引用

store references to arrays in an array

本文关键字:数组 引用 存储      更新时间:2024-05-03

>我有几个这样的数组

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

正如您在bigArray上做forEach时所看到的,我通过映射修改了它的每个数组(arr1arr2 ,...(。

经过这个forEachbigArray看起来像

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

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

我在这里理解的是,bigArray不包含对arr1arr2、....知道我如何传递引用吗?还是我错过了别的东西?

编辑:我想我无法清楚地解释自己,所以就在这里--------我创建bigArray的原因是我有太多的arr1arr2,...所以我不想单独在这些上应用 map,所以我把它们放在一个叫做bigArray的大数组上,并对它们进行forEach

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

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

这是一个演示

同样,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数组,而无需太多额外的击键。

没有映射的解决方案。它将在所有浏览器中工作。

var arr1 = ['name1', 'name2', 'name3'];
var arr2 = [], i;
while(i = arr1.shift()) {
    arr2.push({"name": i});
}
arr1 = arr2;

根据 MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map( 的文档,map 函数Creates a new array with the results of calling a provided function on every element in this array. 你不能单独使用 map() 对原始数组进行操作,因此您需要将map()的结果分配给arr1或其他数组,并在需要更改的地方使用该数组。

你可以做这样的事情,而无需map()推送大量数组:

var bigArray = [arr1, arr2, arr3];
var bigArrayFinal = [];
var nextArray;
while(nextArray = bigArray.slice()) {
  var thisArray = [];
  var nextElement;
  while(nextElement = bigArray.slice()) {
    thisArray.push({"name": nextElement});
  }
  bigArrayFinal.push(thisArray);
}