javascript关于数列的concat与unshift的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript关于数列的concat与unshift的问题相关的知识,希望对你有一定的参考价值。

我发现concat与unshift有一些微妙的差异,不知道为什么... ...
1)
下面第二行,需要对hello进行重新赋值,不然第三行document.write的结果会是abcde没有f,g也没有x和y,
请问这是为什么?
var hello=['a','b','c','d','e','f','g'];
hello=hello.concat(['x','y']);
document.write(hello);

2)
下面第二行如果对hello重新赋值的话,document.write结果不是0abcdefg,而是8,请问这是为什么?
var hello=['a','b','c','d','e','f','g'];
hello = hello.unshift('0');
document.write(hello);

3)unshift和concat都是控制数列的固有函数,但为什么在这里会有差异?

参考技术A <script type="text/javascript">
var arr=['a','b','c','d','e','f','g'];
arr.concat(['x','y']);
alert(arr.concat(['x','y']));
alert(typeof(arr.concat(['x','y'])));
document.writeln(arr);
document.write(arr.concat('x','y'));
</script>

<script type="text/javascript">
var arr=['a','b','c','d','e','f','g'];
arr.unshift('0');
alert(arr);
alert(typeof(arr.unshift('0')));
document.writeln(arr);
document.writeln(arr.unshift('0'));
</script>

我自己做了实验,总结出你自己没有好好区分数组和数组.方法()。第一个concat,也不需要对hellow从新赋值,你要么直接输出arr.concat('x','y').要么重新定义一个数组来存放结果。
第二个arr是数组,arr.unshift('0')是数组方法返回的是个number。
参考技术B

    var hello=['a','b','c','d','e','f','g'];

    > undefined

    hello.concat(['x','y']);

    > ["a", "b", "c", "d", "e", "f", "g", "x", "y"]

    hello

    > ["a", "b", "c", "d", "e", "f", "g"]


    综上:concat 是连接之后的新的数组,但是不会修改原始数组,

    原始数组不发生变化。这个是我在浏览器控制台打印的信息,和你的表述不同

    unshift返回的是被修改后的数组的长度,所以是8

本回答被提问者和网友采纳

如何用整数列做 group_concat?

【中文标题】如何用整数列做 group_concat?【英文标题】:How to do group_concat with Integer columns? 【发布时间】:2021-07-05 04:28:23 【问题描述】:

此查询显示过去 2 周内连续几天的 3 个端点组合(使用某些优先级决定)的性能。

select
    date,
    GROUP_CONCAT(endpoint, ', ') as endpoints, -- This works fine, since endpoint is string
    GROUP_CONCAT(success, ', ') as endpoints_successes, -- This fails
    (sum(success) / sum(attempts) * 100) as percentage
from
    some_table
where 
    and datadate = from_timestamp(date_sub(now(), 14), 'yyyyMMdd')
    and endpoint in ( 
        select distinct endpoint 
        from some_table
        order by some_priority desc 
        limit 2
    )
group by date
order by date

为了在仪表板中显示,我需要使用 group_concat 之类的东西来组合数据集的值。这似乎适用于 String 类型列。

但是,当我想组合 success 字段的值进行显示时,它会失败并出现以下错误:

No matching function with signature: group_concat(BIGINT, STRING)

我应该如何将 Int 转换为 String 以在 group_concat 中使用,或者是否有其他方法可以实现相同的效果?

【问题讨论】:

【参考方案1】:

先尝试将这些数值转换为 STRING,然后再使用 GROUP_CONCAT 进行汇总:

SELECT
    date,
    GROUP_CONCAT(endpoint, ', ') AS endpoints,
    GROUP_CONCAT(CAST(success AS STRING), ', ') AS endpoints_successes,  -- cast here
    SUM(success) / SUM(attempts) * 100 AS percentage
FROM some_table
WHERE
    datadate = FROM_TIMESTAMP(DATE_SUB(NOW(), 14), 'yyyyMMdd') AND
    endpoint IN (SELECT endpoint FROM some_table ORDER BY some_priority DESC LIMIT 2)
GROUP BY date
ORDER BY date;

【讨论】:

以上是关于javascript关于数列的concat与unshift的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何用整数列做 group_concat?

103.兔子产子(菲波那契数列)

斐波那契数列

JavaScript 提交un formulario hacia un popup

c语言的 求这个用程序怎么写

JavaScript常用字符串操作方法