2015-10-26 5 views
0

моя цель - создать функцию, которая может дать строку в качестве аргумента, и иметь возможность сделать массив, в который я мог бы добавить элементы. Вы можете увидеть мою попытку здесь, но она не работает. aka, если я хочу создать имя списка GroceryList, он возвращает GroceryList, но когда я хочу добавить элемент к нему, он говорит, что GroceryList не определен.преобразование строки в имя массива в JavaScript

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

любая помощь была бы потрясающей. Благодаря!

+0

потому что 'name = []' не использует имя переменной, в которую вы проходите ... Вы хотите создать глобальную переменную, содержащую массив? – epascarello

+0

функция makeList не делает, что вы думаете, что делает. Он создает глобальную переменную по имени «name» массива типов. Он переименовывает объект имени и возвращает его. Одно утверждение дало бы вам тот же результат. Вы можете приблизиться к своей цели, используя заявление eval, но я собираюсь опасаться, что лучшее объяснение, почему вы это сделаете, в порядке. –

+0

Это не глобальная @SeanPhillips – epascarello

ответ

0

Параметры в функциях JavaScript передаются по значению, а не по ссылке; поэтому, когда вы делаете что-то вроде этого

var foo = 'bar'; 

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

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

Вы не изменяете переменную, которая была объявлена ​​вне функции. Изменения параметра влияют только на эту локальную функцию, а не на исходную переменную.

Во всяком случае, я не могу представить ни одного возможного сценария, в котором вам понадобится такая функция makeList. Если вам нужен массив, просто создайте его - в этом нет необходимости!

+0

, что имеет смысл, спасибо! –

0

Вам нужна область, в которой вы создаете этот массив. Предположим, вы положили JavaScript в HTML-страницы, и вы хотите, чтобы массив быть в глобальном масштабе, то вы можете создать массив как свойство объекта окна:

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

Вы можете использовать его как это:

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

 Смежные вопросы

  • Нет связанных вопросов^_^