2017-05-26 74 views
1

我只是好奇,为什么代码工作的此块...为什么这现在作为一个返回声明?

function slasher(arr, howMany) { 
    arr.splice(0, howMany); 
    return arr; 
} 

slasher([1, 2, 3], 2); 

但是,这不?我的所需结果是"[3]"

function slasher(arr, howMany) { 
    return arr.splice(0, howMany); 
} 

slasher([1, 2, 3], 2); 
+0

https://jsfiddle.net/6dqpLt1u/ 它可以用任何方式。什么不工作? – CaptainHere

回答

0
function slasher(arr, howMany) { 
    arr.splice(0, howMany); 
    return arr; 
} 

slasher([1, 2, 3], 2); 

这将第一“剪接”给定的阵列中,这在本质上只是将来自阵列(2)去除第一howMany元件。然后您返回数组(现在与前两个​​元素相同的数组不同),因此[3]

function slasher(arr, howMany) { 
    return arr.splice(0, howMany); 
} 

slasher([1, 2, 3], 2); 

这将返回原始拼接的结果。从它说的文档返回值https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice?v=control),这将返回从数组中删除的元素,因此[1, 2]

+0

太棒了!非常感谢! –

3

回答这样的问题只是咨询一个好的文档。我建议Mozilla的MDN - Array.splice()

拼接()方法通过去除现有 元件和/或添加新元素改变的数组的内容。

返回值

含有缺失元素的数组。如果只删除一个元素 ,则返回一个元素的数组。如果删除了 没有元素,则返回一个空数组。

它告诉我们,这种方法改变了就地阵列,即myArray.splice()直接变异/改变myArray代替建立一个新的数组,并返回该的。返回的值实际上是删除了元素的列表。

0

@Sam,splice方法通过删除现有元素和/或添加新元素来更改数组内容(本身)。因此,在第一个代码示例中,您正在获取[3]。

但是,它返回一个包含已删除元素的数组。如果只有一个元素被删除,则返回一个元素的数组。如果没有元素被移除,则返回一个空数组。

作为第二个代码示例中的结果,您会得到:[1,2]。

0

这是因为Splice返回的数组包含已删除的元素,而不是数组中的其余部分。通过返回arr,您在数组被“砍掉”之后返回了数组。

来源:Splice at MDN

0

在任何语言中的大多数功能,要么是存取器,或存取器。他们要么访问一个财产,要么改变财产或结构。在这种情况下,splice()是两个。阅读关于您使用的所有函数的文档非常重要,特别是在JS中,因为它们有时会做更多的事情。

有时一个函数可能会被重载,其中一个版本是一个访问器,另一个版本是增变器。

无论何时将数组传递给函数,都要确保知道数组内容可能会发生什么。

Splice在同时更改数组内容的同时返回已移除的元素。返回值不是您传入的数组。这在多种语言中是常​​见的,用于从数据结构中返回已删除的项目。

相关问题