NodeJS:array.join的结果不正确

时间:2017-09-13 06:04:29

标签: arrays node.js

我注意到array.join的输出不正确,包含(\ r)字符的字符串数组。这是我的代码和输出:

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            MakeTable();
        }

        public async void MakeTable()
        {
            var task = await Task<DataTable>.Factory.StartNew(() =>
            {
                var tbl = new DataTable();
                for (int i = 1; i < 5; i++)
                {
                    tbl.Columns.Add("Coloumn" + i, typeof(int));
                }

                for (int j = 0; j <= 30; j++)
                {
                    var nuRow = tbl.NewRow();
                    for (int k = 0; k < 4; k++)
                    {

                        nuRow[k] = j;
                    }
                    Thread.Sleep(50);
                    tbl.Rows.Add(nuRow);
                }

                return tbl;
            });

            ExportGrid.ItemsSource = task.DefaultView;
        }
    }

它在chrome / firefox控制台中运行良好,而不是在nodejs中。 如果重要的话,我在linux mint 18.3上使用节点6.11.3

我可以为此做一些变通办法,但我对这种情况发生的原因更感兴趣。

1 个答案:

答案 0 :(得分:2)

实际上字符串在你的代码中成功连接,输出结果“,foure”是由char'\ r'引起的,它叫做“linefeed”,Linux / macOS终端中的换行符将光标移动到一个开头行,所以:

  • “one \ r”输出:“one”
  • “one \ r,two \ r”输出:“two”
  • “一个\ r,两个\ r,三个\ r”输出:“三个”
  • “一个\ r,两个\ r,三个\ r,四个\ r”输出:“foure”

最后一个字母“e”来自“三”,\r不是“新行”。 使用“\ n”Carriage Return输出新行,只需将其放入“join(',\ n')”,而不是将其放入数组元素中。

var list = [
    "one",
    "two",
    "three",
    "four"];
    console.log(list); // ok, output: [ 'one', 'two', 'three', 'four' ]
    console.log(list.join(',\n'));