【问题标题】:Funny behaviour of Array.splice()Array.splice() 的有趣行为
【发布时间】:2010-12-01 11:31:55
【问题描述】:

我在jconsole中试验splice()方法

a = [1,2,3,4,5,6,7,8,9,10]
1,2,3,4,5,6,7,8,9,10

这里,a 是一个从 1 到 10 的简单数组。

b = ['a','b','c']
a,b,c

这是b

a.splice(0, 2, b)
1,2
a
a,b,c,3,4,5,6,7,8,9,10

当我将数组 b 传递给 splice 的第三个参数时,我的意思是“从索引零中删除 a 的前两个参数,并用 b 数组替换它们”。我从未见过将数组作为 splice() 的第三个参数传递(所有guide pages I read 都在谈论参数列表),但是,它似乎可以解决问题。 [1,2] 被删除,现在 a 是 [a,b,c,3,4,5,6,7,8,9,10]。然后我建立另一个数组,我称之为 c:

c = ['one','two','three']
one,two,three

并尝试做同样的事情:

a.splice(0, 2, c)
a,b,c,3
a
one,two,three,4,5,6,7,8,9,10

这一次,删除了 4 个(而不是 2 个)元素 [a,b,c,3] 并在开头添加了 c 数组。有人知道为什么吗?我确信解决方案很简单,但我现在不明白。

【问题讨论】:

    标签: javascript arrays array-splice


    【解决方案1】:

    Array.splice支持数组作为第三个参数。
    参考:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

    使用 Firebug(或 Chrome 的控制台),可以看到真正发生了什么:

    a.splice(0, 2, b)
    > [1, 2]
    a
    > [["a", "b", "c"], 3, 4, 5, 6, 7, 8, 9, 10]
    

    这里的问题是 jconsole,它只是使用toString() 打印出数组,但Array.toString() 不打印任何[]

    【讨论】:

    • 太棒了。我被“扁平”的 jconsole 答案误导了(所有东西似乎都是一个数组,而不是 b 数组作为第一个数组的第一个成员,a)。现在一切都清楚了。
    猜你喜欢
    • 2017-02-07
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多