JavaScript - Невозможно получить свойство из массива объекта над функцией (параметры)

1

У меня есть массив объектов:

var keywordset = [
    {word:["PO","Pending Order"],message:["Do you need to post registry?"]},
    {word:["delete"],message:["Do you want to delete in system?"]},
    {word:["contact"],message:["Inter-related feature: Contact Management"]}
]

Кроме того, я создал функцию для преобразования строк в массив объектов в UpperCase:

function ObjectArrayUpperCase(arrayname,array1){
console.log(arrayname[0])
console.log(array1)
for(b=0;b<arrayname.length;b++){
    for(c=0;c<arrayname[b].array1.length;c++){
        arrayname[b].array1[c] = arrayname[b].array1[c].toUpperCase()
      }
    }
}

Затем я запускаю ObjectArrayUpperCase(), передавая в нее параметр

ObjectArrayUpperCase(keywordset,'word')

К сожалению, ObjectArrayUpperCase() неспособная обрабатывать часть "array1", кажется неспособной ее распознать. Но "arrayname" работает так, как ожидалось, потому что, если я заменю "array1" на "word", функция работает.

Я попытался изменить параметр, но все равно не повезло:

ObjectArrayUpperCase(keywordset,'word')
ObjectArrayUpperCase(keywordset,word)
ObjectArrayUpperCase(keywordset,keywordset.word)
etc...

Пожалуйста, сообщите, как передать правильный параметр функции

Теги:

1 ответ

1
Лучший ответ

Вам нужны квадратные скобки для оценки выражения типа array1 которое будет использоваться как имя свойства.

for(var b=0;b<arrayname.length;b++) {
    // -----------------------v------v--- and likewise below
    for(var c=0;c<arrayname[b][array1].length;c++){
        arrayname[b][array1][c] = arrayname[b][array1][c].toUpperCase()
      }
    }
}

В противном случае, как он мог знать, хотите ли вы использовать переменную или фактическое свойство с этим именем?

Кроме того, обязательно объявляйте свои переменные явно. Я использовал var выше.

Наконец, циклы могут быть написаны немного более чисто, используя современный синтаксис и методы, подобные этому:

arrayname.forEach(obj => obj[array1] = obj[array1].map(s => s.toUpperCase()))
  • 0
    Это работает! Спасибо! Но почему .array1 не работает?
  • 0
    Пожалуйста.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню