0

我在 MaxMSP 中使用 JS

我想获取一个字符串输出(由逗号单个斐波那契数字分隔)并将其转换为数组或数字,保留空格和逗号但得到“双引号”

我在这里尝试了很多东西,但不幸的是我仍然把头撞在墙上。

autowatch = 1;

inlets = 2;
outlets = 2;


function msg_int(num){

  var a = 1; 
  var b = 0, temp;


  while (num >= 0){
    temp = a;
    a = a + b;
    b = temp;
    num--;
    outlet(0, b);


    var n = temp;
    digits = n.toString().replace(/(\d{1})/g,'$1, ')
    outlet(1, digits);


  }
    return b;


}

输入编号为 14 第一个 outlet(0) 编号为 610 第二个 outlet(1) 为“6, 1, 0,”

我希望第二个出口是 6, 1, 0,

4

2 回答 2

1

var result = '"6, 1, 0,"'.replace(/['"]+/g, '')
console.info(result);

于 2019-06-11T21:33:33.277 回答
0

看起来你想outlet(1)输出一个最大“列表”而不是一个符号。outlet将为您处理,但您需要将它交给一个数组来实现这一点。这是它在文档中所说的:

如果 outlet 的参数是一个数组,它会展开(仅一层)并作为 Max 消息或列表传递(取决于数组的第一个元素是数字还是字符串)。

知道了这一点,您需要先转换digits为数组,然后再将其传递给outlet

var n = temp;
var digits = n.toString(); // convert 610 to "610" (for example)
digits.split("");          // split "610" into ["6", "1", "0"]
outlet(1, digits);

这是 Max 列表还是消息取决于第一个元素的类型,因此如果您需要一个数字列表(在您的情况下为整数),您可以在将其传递给插座之前执行以下操作:

// map ["6", "1", "0"] to [6, 1, 0]
digits = digits.map(function (i) { return parseInt(i) });
于 2020-03-04T11:36:32.600 回答