簡體   English   中英

為什么這些返回數組的方式在Javascript中有所不同?

[英]Why do these ways of returning arrays differ in Javascript?

我有兩個例子:

function myFunction(arr, size) {
  // Break it up.
 var newArray = [];

  var tempArray = arr.splice(0,1);
 newArray.push(arr.splice(0,1));
 console.log(newArray);

  return arr;
}

myFunction(["a", "b", "c", "d"], 2);

還有這個:

function myFunction(arr, size) {
  // Break it up.
 var newArray = [];

  var tempArray = arr.splice(0,1);
 newArray.push(tempArray);
 console.log(newArray);

  return arr;
}

myFunction(["a", "b", "c", "d"], 2);

主要區別在於:

 newArray.push(arr.splice(0,1)); // Or newArray.push(tempArray);

為什么第一個示例返回Array [1],第二個示例為何返回[“ a”]?

無論我走哪條路,我都希望得到[“ a”],有人可以幫助我了解這里發生了什么嗎?

我只是想通過拼接來獲取數組的第一個元素(我相信該元素會返回已刪除元素的數組),然后將該數組推入我的“ newArray”,以便最終得到一個包含嵌套數組的數組,其中每個數組都包含嵌套數組。 即[[“ a”],[“ b”],[“ c”] ...]

編輯:請忽略“大小”參數。 EDIT2:真誠的道歉。 我不擔心退貨聲明。 我笨到忘了提。 我正在查看我的console.log輸出。 當我運行腳本並查看控制台時,就是在獲取Array [1]或[“ a”]的時候。

這是您需要記住的最重要的信息: splice更改了原始數組(請閱讀: https : //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice )。

因此,讓我們看看您的第一個功能。 這行:

var tempArray = arr.splice(0,1);

按預期更改arr 但是,當您在下一行中執行此操作時:

newArray.push(arr.splice(0,1));

您再次更改了arr

另一方面,您的第二個功能僅更改arr一次:

var tempArray = arr.splice(0,1);
newArray.push(tempArray);

簡而言之:只需計算您在第一個函數中有一個splice次數(2次,將原始數組更改兩次)和在第二個函數中有一個splice次數(1次,僅更改一次原始數組) 。

編輯:關於console.log, newArray是帶有數組的數組,這就是為什么有時您會看到Array[1] 做這個:

console.log(newArray[0]);

現在,您會看到["a"]["b"]或其他內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM