我试图使用以下命令将字母转换为ASCII:
var subArr = [["S", "E", "R", "R"], ["C", "V", "M", "M", "N", "!"]];
for (var i in subArr) {
var newStr = subArr[i].map( function(val) {
return val.charCodeAt()
})
}
console.log(newStr)
但是似乎只有第二个子数组被转换,而第一个子数组甚至没有被考虑。有人可以帮我在这里了解这个问题吗?
答案 0 :(得分:3)
这是打印语句范围的问题。请注意,您要为每个子列表进行迭代,并将映射结果重新分配给相同的变量newStr
,因此,当您在末尾console.log
时,它仅包含对应于最后一个子列表的值!
var subArr = [["S", "E", "R", "R"], ["C", "V", "M", "M", "N", "!"]];
for (var i in subArr) {
var newStr = subArr[i].map(function(val) {
return val.charCodeAt();
});
console.log(newStr);
}
答案 1 :(得分:1)
console.log(newStr)
在循环之外。您需要创建一个列表并将新值推入其中。
像这样:
var subArr = [["S", "E", "R", "R"], ["C", "V", "M", "M", "N", "!"]];
var resultArr = [];
for (var i in subArr) {
resultArr.push(subArr[i].map(function(val) {
return val.charCodeAt();
}));
}
console.log(resultArr);
答案 2 :(得分:0)
您没有转义仅用first array
压碎second one
的第一个数组
var subArr = [
["S", "E", "R", "R"],
["C", "V", "M", "M", "N", "!"]
];
var newStr = [];
for (var i in subArr) {
newStr = newStr.concat(subArr[i].map(function(val) {
return val.charCodeAt()
}))
}
console.log(newStr);
答案 3 :(得分:0)
console.log()应该在 for 循环内(在...的范围内)。在map()函数中,您正在将数组转换为字符代码,并将其分配给变量newStr。因此,当为第二个数组元素执行映射时,newStr包含第二个元素的代码。因此,仅打印subArr的第二个数组元素。
var subArr = [["S", "E", "R", "R"], ["C", "V", "M", "M", "N", "!"]];
for (var i in subArr) {
var newStr = subArr[i].map( function(val) {
return val.charCodeAt()
});
console.log(newStr)
}
答案 4 :(得分:0)
您的log语句不在循环中,这意味着它将在循环完成执行后立即打印newStr
的值。
在循环中,您使用相同的变量newStr
在每次迭代中存储值。这意味着第二次迭代将覆盖第一个迭代,依此类推。
如果您要为每个字符使用ASCII码代替字符本身,则应执行以下操作
var arrays = [
["S", "E", "R", "R"],
["C", "V", "M", "M", "N", "!"]
];
let asciiArrays = arrays.map(subArray =>
subArray.map(val => val.charCodeAt())
);
console.log(asciiArrays);