为什么地图功能会跳过第一个元素?

时间:2019-02-25 22:39:50

标签: javascript

我试图使用以下命令将字母转换为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)       

但是似乎只有第二个子数组被转换,而第一个子数组甚至没有被考虑。有人可以帮我在这里了解这个问题吗?

5 个答案:

答案 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);