在 Javascript 中映射二维数组
Mapping two dimensions array in Javascript
对于二维数组的输入,我需要将元素大写的数组作为输出。
这是我的尝试,但没有用。
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
console.log(cityRow);
function upperCaseArray(myArray) {
var upperized = myArray.map(function(city){
console.log(typeof city);
return city.toUpperCase();
});
return upperized;
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
// output desired:
// [['AVILA], ['BURGOS'], ['MADRID'], ['SEVILLA']]
// [['AVILA, 'AVILA', 'BURGOS', 'MADRID', SEVILLA']]
// [['SEVILLA']]
注意:这些输入是我从 Google Sheet 范围 SpreadsheetApp.getActiveSpreadsheet().getSelection().getActiveRange().getValues()
中获得的。我开始编写 Google Apps 脚本。
因为你的字符串嵌套在数组中,而数组本身又在数组中,你需要 two .map
s:
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
function upperCaseArray(arr) {
return arr.map(function(subarr) {
return subarr.map(function(str) {
return str.toUpperCase();
});
});
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
您可以使用 .map()
创建包含大写字符串的数组:
let cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
let cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
let cityCell = [['sevilla']];
function upperCase(arr) {
return arr.map(function(a) {
return a.map(function(s) { return s.toUpperCase(); });
});
};
console.log(upperCase(cityColumn));
console.log(upperCase(cityRow));
console.log(upperCase(cityCell));
.as-console-wrapper { max-height: 100% !important; top: 0; }
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
function parseData(input){
return input.reduce(function(o,i){
return i.reduce(function(oo,ii){
oo.push(ii.toUpperCase());
return oo;
},[]);
},[]);
}
console.log(parseData(cityCell));
console.log(parseData(cityRow));
console.log(parseData(cityColumn));
首先,数组中的元素需要用引号括起来 "
或 '
以将它们标记为字符串,否则解释器会将它们视为未定义的变量。
您可以使用 map
函数将函数应用于数组中的所有元素。但由于这是一个二维数组,您需要以嵌套方式应用它,如下所示:
var cityColumn = [["avila"], ["burgos"], ["madrid"], ["sevilla"]];
var cityRow = [["avila", "avila", "burgos", "madrid", "sevilla"]];
var cityCell = [["sevilla"]];
function arrUpper(arr) {
// o as in outer, and i as in inner
return arr.map(o => o.map(i => i.toUpperCase()));
}
console.log(arrUpper(cityColumn));
console.log(arrUpper(cityRow));
console.log(arrUpper(cityCell));
输出
[["AVILA"], ["BURGOS"], ["MADRID"], ["SEVILLA"]]
[["AVILA", "AVILA", "BURGOS", "MADRID", "SEVILLA"]]
[["SEVILLA"]]
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila, avila, burgos, madrid, sevilla']];
var cityCell = [['sevilla']];
console.log(cityRow);
function upperCaseArray(arr) {
return arr.map(a => a.map(item => item.toUpperCase()));
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
我不得不在字符串中添加单引号。
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila, avila, burgos, madrid, sevilla']];
var cityCell = [['sevilla']];
console.log(cityRow);
function upperCaseArray(arr) {
return arr.map(a => a.map(item => item.toUpperCase()));
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
您可以join()
将数组设为字符串。然后大写字符串。最后 split()
他们再次从数组中移出。
改变
return city.toUpperCase();
至
return city.join(',').toUpperCase().split(',');
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
function upperCaseArray(myArray) {
var upperized = myArray.map(function(city){
return city.join(',').toUpperCase().split(',');
});
return upperized;
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
您可以递归地使用map
。
function toUpper(arr){
if(arr.map){
return arr.map(toUpper);
} else {
return arr.toUpperCase();
}
}
二维数组的递归深度为2。GAS最多支持1000。
对于二维数组的输入,我需要将元素大写的数组作为输出。
这是我的尝试,但没有用。
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
console.log(cityRow);
function upperCaseArray(myArray) {
var upperized = myArray.map(function(city){
console.log(typeof city);
return city.toUpperCase();
});
return upperized;
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
// output desired:
// [['AVILA], ['BURGOS'], ['MADRID'], ['SEVILLA']]
// [['AVILA, 'AVILA', 'BURGOS', 'MADRID', SEVILLA']]
// [['SEVILLA']]
注意:这些输入是我从 Google Sheet 范围 SpreadsheetApp.getActiveSpreadsheet().getSelection().getActiveRange().getValues()
中获得的。我开始编写 Google Apps 脚本。
因为你的字符串嵌套在数组中,而数组本身又在数组中,你需要 two .map
s:
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
function upperCaseArray(arr) {
return arr.map(function(subarr) {
return subarr.map(function(str) {
return str.toUpperCase();
});
});
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
您可以使用 .map()
创建包含大写字符串的数组:
let cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
let cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
let cityCell = [['sevilla']];
function upperCase(arr) {
return arr.map(function(a) {
return a.map(function(s) { return s.toUpperCase(); });
});
};
console.log(upperCase(cityColumn));
console.log(upperCase(cityRow));
console.log(upperCase(cityCell));
.as-console-wrapper { max-height: 100% !important; top: 0; }
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
function parseData(input){
return input.reduce(function(o,i){
return i.reduce(function(oo,ii){
oo.push(ii.toUpperCase());
return oo;
},[]);
},[]);
}
console.log(parseData(cityCell));
console.log(parseData(cityRow));
console.log(parseData(cityColumn));
首先,数组中的元素需要用引号括起来 "
或 '
以将它们标记为字符串,否则解释器会将它们视为未定义的变量。
您可以使用 map
函数将函数应用于数组中的所有元素。但由于这是一个二维数组,您需要以嵌套方式应用它,如下所示:
var cityColumn = [["avila"], ["burgos"], ["madrid"], ["sevilla"]];
var cityRow = [["avila", "avila", "burgos", "madrid", "sevilla"]];
var cityCell = [["sevilla"]];
function arrUpper(arr) {
// o as in outer, and i as in inner
return arr.map(o => o.map(i => i.toUpperCase()));
}
console.log(arrUpper(cityColumn));
console.log(arrUpper(cityRow));
console.log(arrUpper(cityCell));
输出
[["AVILA"], ["BURGOS"], ["MADRID"], ["SEVILLA"]]
[["AVILA", "AVILA", "BURGOS", "MADRID", "SEVILLA"]]
[["SEVILLA"]]
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila, avila, burgos, madrid, sevilla']];
var cityCell = [['sevilla']];
console.log(cityRow);
function upperCaseArray(arr) {
return arr.map(a => a.map(item => item.toUpperCase()));
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
我不得不在字符串中添加单引号。
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila, avila, burgos, madrid, sevilla']];
var cityCell = [['sevilla']];
console.log(cityRow);
function upperCaseArray(arr) {
return arr.map(a => a.map(item => item.toUpperCase()));
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
您可以join()
将数组设为字符串。然后大写字符串。最后 split()
他们再次从数组中移出。
改变
return city.toUpperCase();
至
return city.join(',').toUpperCase().split(',');
var cityColumn = [['avila'], ['burgos'], ['madrid'], ['sevilla']];
var cityRow = [['avila', 'avila', 'burgos', 'madrid', 'sevilla']];
var cityCell = [['sevilla']];
function upperCaseArray(myArray) {
var upperized = myArray.map(function(city){
return city.join(',').toUpperCase().split(',');
});
return upperized;
}
console.log(upperCaseArray(cityColumn));
console.log(upperCaseArray(cityRow));
console.log(upperCaseArray(cityCell));
您可以递归地使用map
。
function toUpper(arr){
if(arr.map){
return arr.map(toUpper);
} else {
return arr.toUpperCase();
}
}
二维数组的递归深度为2。GAS最多支持1000。