簡體   English   中英

為什么此代碼可用於我的數組,但不能輸入字符串數組呢? 的JavaScript

[英]Why does this code work with my array, but not when I typed in an array of strings? JavaScript

當我有數字數組時,此代碼有效,但當我輸入字符串數組時,此代碼無效; 我確實更改了代碼,之后將.length用於字符串,但這很有幫助。 錯誤與“ arr [i] .reduce(function(onea,twoa){”在第二個版本中是未定義的函數有關。哦,@ user1600124,即使我仍然鍵入,該提示也可能是錯誤。在“ [[[” one“,” two“,” three“],[” one1“,” two2“,” three3“]]”中,將其全部更改為字符串。我認為您已經解決了,但是有沒有提示用戶輸入的方法,謝謝@ user1600124!

var ArrayWidth = function(arr){
  var ret = [], i; 
  for (i = 0; i < arr.length; i++) {   
    arr[i].reduce(function (onea, twoa) {
      return ret[i] = Math.max(onea.length, twoa.length); //added ".length" to stings version
    }, 0); //added ",0" to strings version
  ret[i] = ret[i].toString().length;
  }
  return ret;
}

數字數組的工作完整代碼:

//Draws Non=Jagged Table with columns be the arrays in the array of arrays and the first being the heading.
var arrays = [
    [111111, 22222, 333],
    [444444444, 534334, 63],
    [73, 83748395, 9343],
    [279571, 327894598571490581, 34815, 2]
];

function ArrayHeight (arr) {
  var ret = [], i, j;
  for(i = 0; i < arr.length; i++){
    window["a"+i] = arr[i];
    ret[i] = window["a"+i];
    for(j = 0; j < ret[i].length; j++)
          ret[i][j] = ret[i][j].toString();
  }
  return ret;
}
var ArrayWidth = function(arr){
  var ret = [], i; 
  for (i = 0; i < arr.length; i++) {   
    arr[i].reduce(function (onea, twoa) {
      return ret[i] = Math.max(onea, twoa);
    });
  ret[i] = ret[i].toString().length;
  }
  return ret;
}
function addSpace (){
  var ret = ArrayHeight(arrays);
  console.log(ret);
  var widthOfRet = ArrayWidth(arrays);
  console.log(widthOfRet);
  var i, j, k;
  for(j = 0; j < ret.length; j++){
    for(k = 0; k < (ret[j].length); k++){
      for(i = ret[j][k].length; i < (widthOfRet[j] + 1); i++){
        ret[j][k] = ret[j][k] + " ";
      }
    }
  }
  return ret;
}

var drawTable = function(){
  var ret = addSpace();
  var ArrayWid = ArrayWidth(arrays);
  var table = "", retFirst = "", retSecond = "", totaled = 0, i, j;
  for (i = 0; i < ArrayWid.length; i++)
    totaled = totaled + ArrayWid[i];
  for(i = 0; i < ret.length; i++)
    retFirst = retFirst + ret[i][0];
  for(i = 0; i < (totaled + ret.length); i++)
    retSecond = retSecond + "-";
  for(j = 0; j < ret.length; j++)
    for(i = 0; i < ret[j].length; i++)
      window["reti"+i] = "";
  for(j = 0; j < ret.length; j++)
    for(i = 0; i < ret[j].length; i++)
      window["reti"+i] = window["reti"+i] + ret[j][i];
  table = retFirst + "\n" + retSecond;
  for(i = 1; window["reti"+i] != undefined; i++)
    table = table + "\n" + window["reti"+i];
  return table;
}
console.log(drawTable());

與字符串數組不兼容:

//Draws Non-Jagged Table with columns be the arrays in the array of arrays and the first being the heading.
var arrays = prompt("To draw a table, type in an array of arrays. Each array is a column and the first is the heading. Cannot be jagged.", "[ [ , ... ], [, ... ], ... ]");

function ArrayHeight (arr) {
  var ret = [], i, j;
  for(i = 0; i < arr.length; i++){
    window["a"+i] = arr[i];
    ret[i] = window["a"+i];
    for(j = 0; j < ret[i].length; j++)
          ret[i][j] = ret[i][j].toString();
  }
  return ret;
}
var ArrayWidth = function(arr){
  var ret = [], i; 
  for (i = 0; i < arr.length; i++) {   
    arr[i].reduce(function (onea, twoa) {
      return ret[i] = Math.max(onea.length, twoa.length);
    }, 0);
  ret[i] = ret[i].toString().length;
  }
  return ret;
}
function addSpace (){
  var ret = ArrayHeight(arrays);
  console.log(ret);
  var widthOfRet = ArrayWidth(arrays);
  console.log(widthOfRet);
  var i, j, k;
  for(j = 0; j < ret.length; j++){
    for(k = 0; k < (ret[j].length); k++){
      for(i = ret[j][k].length; i < (widthOfRet[j] + 1); i++){
        ret[j][k] = ret[j][k] + " ";
      }
    }
  }
  return ret;
}

var drawTable = function(){
  var ret = addSpace();
  var ArrayWid = ArrayWidth(arrays);
  var table = "", retFirst = "", retSecond = "", totaled = 0, i, j;
  for (i = 0; i < ArrayWid.length; i++)
    totaled = totaled + ArrayWid[i];
  for(i = 0; i < ret.length; i++)
    retFirst = retFirst + ret[i][0];
  for(i = 0; i < (totaled + ret.length); i++)
    retSecond = retSecond + "-";
  for(j = 0; j < ret.length; j++)
    for(i = 0; i < ret[j].length; i++)
      window["reti"+i] = "";
  for(j = 0; j < ret.length; j++)
    for(i = 0; i < ret[j].length; i++)
      window["reti"+i] = window["reti"+i] + ret[j][i];
  table = retFirst + "\n" + retSecond;
  for(i = 1; window["reti"+i] != undefined; i++)
    table = table + "\n" + window["reti"+i];
  return table;
}
console.log(drawTable());
alert("Your table is in the console.log");

我的html:

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<script language="javascript">

//script was here

</script>
</body>
</html>

謝謝! :)

您正在對輸入數組的內容調用reduce函數。 當您具有數字數組時,arr [i]是一個數組,因此具有reduce方法

當您有字符串數組時,arr [i]是一個字符串,並且沒有嘗試使用的reduce方法。 所以你最終會出錯

嘗試這個:

function ArrayWidth(ary){
  var r = [];
  for(var i=0,l=ary.length; i<l; i++) {   
    r[i] = ary[i].reduce(function(a, b){
      return Math.max(a, b);
    }, 0);
  }
  return r;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM