javascript - 如何缩小范围以防止变量被修改

标签 javascript arrays function

我有以下变量:

var a = [30,6,26,49,3,9,28];

以及以下两个函数:

function init(data) {
  var modifiedData = data.reverse().slice(1, data.length).reverse();
  return modifiedData;
}

// Output should be:
// Init: 30,6,26,49,3,9,28
// [30, 6, 26, 49, 3, 9]

function last(data) {
  var modifiedData = data.reverse().slice(0, 1);
  return modifiedData;
}

// Output should be:
// Last: 30,6,26,49,3,9,28
// [28]

如果我像这样调用每个函数:

init(a);
last(a);

我从第二个函数得到以下输出:

Last: 28,9,3,49,26,6,30
[30]

因为显然第一个函数正在对数据应用reverse(),而第二个函数似乎继承了第一个函数的reverse()

如何连续使用这两个函数,同时使用相同的变量作为引用?

最佳答案

Array.prototype.reverse 反转实际数组(在使用 .slice() 克隆之前)。忘记相反的事情,您可以直接使用 array.slice 来做到这一点:

var a = [30,6,26,49,3,9,28];

function init(data) {
  console.log("Init: " + data);
  var modifiedData = data.slice(0, -1);
  console.log(modifiedData);
  return modifiedData;
}

// Output should be:
// Init: 30,6,26,49,3,9,28
// [30, 6, 26, 49, 3, 9]

function last(data) {
  console.log("Last: " + data);
  var modifiedData = data.slice(-1);
  console.log(modifiedData);
  return modifiedData;
}

// Output should be:
// Last: 30,6,26,49,3,9,28
// [28]

init(a);
last(a);

运行它时,请查看浏览器控制台以查看结果。

-1data.length - 1 相同。

关于javascript - 如何缩小范围以防止变量被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31033641/

相关文章:

javascript - 单击按钮查找两个数字中的最大值

javascript - 在这里正确使用函数式编程 : how do I use . map() 有效吗?

javascript - Angularjs Modal + 自动完成输入(附有 Plunker)

javascript - 使用标题破坏

python - 掩码二维 numpy 数组

Javascript 在 map() 函数中使用函数 Number() 将字符串转换为数字

javascript - 基于多条件/因素的排名算法

javascript - 当表更改内容时调用 Javascript 函数

arrays - 如何使用 UITextField 输入附加数组?

ios - swift 从 Cloudkit 中删除 CKRecord