2017-01-25 13 views
-1

使用谷歌表脚本编辑器,我想替换每个这张表对数字值替换阵列值,如下所示:在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

谢谢hackerrdave。虽然我更喜欢另一种解决方案,因为它不需要太多的其他解决方案。 – ireth92

+0

是的,我更喜欢其他的解决方案!哈哈 – hackerrdave