2017-01-25 3 views
-1

Использование редактора сценариев Google Таблиц, я хочу заменить каждое из значений этого таблицы для чисел следующим образом:Заменить значения массива в JavaScript с .map()

"I like it" = 2 
"I don't like it" = -1 
"Haven't seen it" = 0 

+---------+-----------------+-----------------+-----------------+ 
|   |  User A  |  User B  |  User C  | 
+---------+-----------------+-----------------+-----------------+ 
| Movie 1 | I like it | I don't like it | Haven't seen it | 
+---------+-----------------+-----------------+-----------------+ 
| Movie 2 | Haven't seen it | Haven't seen it | I don't like it | 
+---------+-----------------+-----------------+-----------------+ 
| Movie 3 | Haven't seen it | I don't like it | I Like it | 
+---------+-----------------+-----------------+-----------------+ 

Я не уверен в том, Я должен использовать array.map() или array.forEach(), но в обоих случаях я не могу понять, как сделать сравнение каждой ячейки со строками, чтобы создать условие.

Если возможно, я бы предпочел, чтобы избежать использования два для петли, как я считаю, что это должно быть возможно с array.map() и что кажется чище.

ответ

2

Вот еще один способ, используя карту(): в соответствии с (имя листа изменений и диапазон).

function stringToNumbers() { 

var strings, numbers, range, data, ind; 

strings = ['I like it', 'I don\'t like it', 'Haven\'t seen it']; 
numbers = [2, -1, 0]; 
range = SpreadsheetApp.getActive() 
    .getSheetByName('Sheet6') 
    .getRange('B2:D6') 
data = range.getValues() 
    .map(function (r) { 
     return r.map(function (el) { 
      ind = strings.indexOf(el); 
      return ind > -1 ? numbers[ind] : null; 
     }) 
    }) 

Logger.log(data) 
//range.setValues(data) //if you want to write the numbers back to the sheet, uncomment this line. 
} 
+0

Спасибо JPV, что сработало отлично :) – ireth92

1

Чтобы перевести все данные в массив, вы, вероятно, захотите использовать Array.prototype.map(). Однако, так как ваша структура данных я предполагаю, вложенная массив может понадобиться иметь комбо forEach и map:

var arr = [['I like it', 'I don't like it', 'Haven't seen it'],[//etc]]; 

function stringToNumber(str) { 
    var num; 
    if (str === "I like it") { 
    num = 2; 
    } else if (str === "I don't like it") { 
    num = -1; 
    } else if (str === "Haven't seen it") { 
    num = 0; 
    } 
    return num; 
} 

function mapRow(row) { 
    return row.map(stringToNumber); 
} 

arr.forEach(mapRow) 
+1

Thank you hackerrdave. Хотя я предпочел другое решение, так как он не требует так много других утверждений. – ireth92

+0

Да, я тоже предпочитаю другое решение! haha – hackerrdave

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