【问题标题】:converting string to array name in JavaScript在 JavaScript 中将字符串转换为数组名称
【发布时间】:2015-10-26 23:25:39
【问题描述】:

我的目标是能够创建一个可以将字符串作为参数提供的函数,并能够创建一个可以添加项目的数组。你可以在这里看到我的尝试,但它似乎不起作用。 aka,如果我想创建一个列表名称 GroceryList,它会返回 GroceryList,但是当我想向其中添加一个项目时,它会说 GroceryList 未定义。

function removeInstance(list, item){
  for(var i = 0; i < list.length; i++){
    if(item === list[i]){
      list.splice(i, 1);
      console.log(list);
      break;
    }
  }
}
function makeList(name){
  name = [];
  console.log(name);
  return name;
}
function removeAllItems(list, item){
  for(var i = 0; i < list.length; i++){
    if(item === list[i]){
      list.splice(i, 1);
      i--;
    }
  }
  console.log(list);
}
function addItem(list, item){
    list.push(item);
    console.log(list);
}

任何帮助都会很棒。谢谢!

【问题讨论】:

  • 因为name = []没有使用你传入的变量名...你要创建一个保存数组的全局变量吗?
  • 函数 makeList 没有做你认为它正在做的事情。它通过类型数组的“名称”名称创建一个全局变量。它回显名称对象并返回它。一个陈述会给你同样的结果。使用 eval 语句,您可能会更接近您的目标,但我会冒险猜测,一个更好的解释为什么要这样做是为了。
  • 这不是一个全球性的@SeanPhillips
  • 好点 - 但它绝不会命名一个变量,除了名为“name”的函数的 loal 变量
  • 你似乎在重新发明轮子,在这里。查看 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 了解您的所有 JavaScript 列表需求。

标签: javascript arrays variable-names


【解决方案1】:

JavaScript 函数中的参数是按值传递的,而不是引用;因此,当你做这样的事情时

var foo = 'bar';

function makeList(name){
  name = [];
  console.log(name);
  return name;
}

makeList(foo);
console.log(foo); // shows 'bar'

您没有修改在函数外部声明的变量。对参数的更改只会影响该局部函数,而不影响原始变量。

无论如何,我想不出任何可能需要这样一个 makeList 函数的情况。如果您需要一个数组,只需创建一个 - 不需要这个!

【讨论】:

    【解决方案2】:

    您需要一个在其中创建此数组的范围。假设您将 JavaScript 放在 HTML 页面中,并且您希望数组在全局范围内,那么您可以将数组创建为窗口对象的属性:

    function makeList(name){
       window[name] = [];
       return window[name];
    }
    

    你可以这样使用它:

        var arr = makeList("myList");
        myList.push("hello");
        alert('item 0 = ' + myList[0]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 2014-11-10
      • 2014-05-01
      • 2015-11-11
      • 2011-09-22
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多