在数组中存储对数组的引用
store references to arrays in an array
>我有几个这样的数组
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
时所看到的,我通过映射修改了它的每个数组(arr1
,arr2
,...(。
经过这个forEach
,bigArray
看起来像
[
[{name: 'name1'}, {name:'name2'}, {name:'name3'}],
[{name: 'name4'}, {name:'name5'}, {name:'name6'}],
....
]
但arr1
仍在['name1', 'name2', 'name3']
,arr2
仍在['name4', 'name5', 'name6']
我在这里理解的是,bigArray
不包含对arr1
、arr2
、....知道我如何传递引用吗?还是我错过了别的东西?
编辑:我想我无法清楚地解释自己,所以就在这里--------我创建bigArray
的原因是我有太多的arr1
,arr2
,...所以我不想单独在这些上应用 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);
}
- JavaScript变量引用数组时出现问题
- 如何创建以下数组的克隆而不是引用
- 将数组从 Spring bean 转换为 JSON 以在 JSP 中引用
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- 在 Larawel 中存储引用数组
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 我需要引用使用 .get() 创建的数组
- 引用函数数组中的另一个函数
- 数组和反向引用
- 如何通过向用户推送模式引用来更新用户对象's数组字段
- 按数组引用 JavaScript 对象
- 在循环中创建的函数中使用时出现数组引用问题
- 数组引用:将对象添加到对象数组中
- Javascript中的数组引用
- Mongodb/Mongoose:填充ObjectId数组(引用)
- Javascript函数不修改数组(引用?)
- 为什么我不能在JavaScript中连接数组引用?
- 如何从数组引用TypeScript类中的此父方法's ForEach循环
- 在 JavaScript 和 ActionScript 之间共享数组引用
- 为什么数组引用号转换为STRING