2017-01-25 9 views
-1

Mit Google Sheets' Editor Script, ich möchte ersetzen jede dieser Tabelle die Werte für Zahlen wie folgt:mit .map in Javascript()

"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 | 
+---------+-----------------+-----------------+-----------------+ 

Ich bin nicht sicher, ob Ich sollte verwenden array.map() oder array.forEach() aber in beiden Fällen kann ich nicht herausfinden, wie man den Vergleich jeder Zelle mit den Strings, um die Bedingung zu erstellen.

Wenn möglich, würde ich es vorziehen, mit zwei für Schleifen zu vermeiden, wie ich es glaube, mit array.map möglich sein muss() und das scheint sauberer.

Antwort

2

Hier ist eine andere Art und Weise unter Verwendung von Karte(): Aber ich davon aus, da der Datenstruktur bin eine verschachtelte Array ist, können Sie eine Kombination aus forEach und map haben müssen (ändern Blattnamen und Bereich anpassen).

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

Danke JPV, das hat perfekt funktioniert :) – ireth92

1

Um alle Daten in einem Array zu übersetzen, möchten Sie wahrscheinlich Array.prototype.map() verwenden.

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

Vielen Dank hackerdave. Obwohl ich die andere Lösung bevorzugte, da es nicht so viele andere Anweisungen erfordert. – ireth92

+0

Ja, ich bevorzuge auch die andere Lösung! haha – hackerrdave