将数组值替换为循环以创建新数组

时间:2015-03-04 22:52:24

标签: javascript arrays

我不用javascript编程,所以请随时告诉我这是不是一个疯狂的想法。

我想在数组中获取值并从这些值构建数组。例如,使用下面的“people”数组,我想创建空数组“jack_test”,“john_test”,“mary_test”等。

var people = ["jack","john","mary"];


 for (var i = 0; i < people.length; i++){
  //I'd like to execute code here that would create new arrays like jack_test = [], john_test= [], etc.
 }

更新:糟糕的问题,抱歉。我真的处于这个初学者的水平,所以请耐心等待。让我们尝试一个不同的场景(抱歉,如果它偏离原始问题太多):

假设我有一个像“人”这样的阵列,虽然实际上它会更长。然后我有另一个具有相关体重的数组,即

var weights = [150,180,120]    

对于每个人,我想把它们的起始重量放在数组“权重”中并为它添加一些常量以形成变量(或者@Pointy指出,形成属性名称)“jack_weight”,“john_weight”等

如果我在脑海中设置错误并且有更有效的方法,请告诉我。

2 个答案:

答案 0 :(得分:4)

你不能&#34;构建&#34; JavaScript * 中的变量名,但可以构造对象属性名。

var people = ["jack","john","mary"], tests = {};


 for (var i = 0; i < people.length; i++){
  //I'd would like to execute code here that would create new arrays like jack_test = [], john_test= [], etc.
  tests[people[i]] = "something";
 }

这将创建&#34;测试&#34;的属性。名称取自您的数组的对象。此外,people[i]可以是任何表达式,如果您想要为名称添加前缀等。

* 是的,我知道,有eval()编辑和全局变量,它们是对象属性,因此确实是上述示例的一个特例,除了有额外的危险(&#34;特殊&#34;全局符号等)。

答案 1 :(得分:1)

您无法完全复制本地作用域的var jack_test = [],但您可以通过窗口对象进行全局作用,也可以在任何其他对象的本地作用。

var people = ["jack","john","mary"];
for (var i = 0; i < people.length; i++) {
  // assigns the property globally
  window[people[i]+'_test'] = []; 
}
console.log(jack_test); // []

这是有效的,因为在全局范围内(即在任何函数之外),像var x = 'whatever'这样的变量被赋值给窗口,所以它们是同义词:

var x = 'whatever';
window.x = 'whatever';

您可以使用相同的方法动态地将属性分配给任何对象,而不是使用window

var myObj = {};
var myProp = 'foo';
myObj[myProp] = 'foo value';
console.log(myObj.foo); // 'foo value'