这个函数似乎正在重写'pages'变量的值,而我在这个变量的结尾。
我尝试通过函数返回变量,将变量硬编码到函数中,以及其他一些东西,但这看起来应该可行。
有什么想法吗?
编辑:
输出应该是一个格式为{default: "Tax Return", safe: "taxreturn"}
的对象数组。首次使用getPages('Both', 'overview', null)
和getPages('Both', null, 'overview')
调用此函数时会执行此操作,但如果您多次调用它,则会出错,您会发现'pages'变量现在是一个对象数组。
var pages = [
"Dashboard",
"Overview",
"Contacts",
"Records",
"Cash Flow",
"Transactions",
"Income",
"Expenses",
"Tax Return"
];
var getPages = function(format, includeOne, excludeOne)
{
var pageStrings = pages;
if(includeOne)
for(var p = 0; p < pageStrings.length; p++)
if(uriSafe(pageStrings[p]) == uriSafe(includeOne))
pageStrings = [pageStrings[p]];
if(excludeOne)
for(var c = 0; c < pageStrings.length; c++)
if(uriSafe(pageStrings[c]) == uriSafe(excludeOne))
pageStrings.splice(c, 1);
var outputArray = [];
switch(format)
{
case 'UriSafe':
for(var i = 0; i < pageStrings.length; i++)
pageStrings[i] = uriSafe(pageStrings[i]);
break;
case 'Both':
for(var x = 0; x < pageStrings.length; x++)
{
pageStrings[x] = {
default: pageStrings[x],
safe: uriSafe(pageStrings[x])
};
}
break;
default:
}
function uriSafe(str)
{
return str.replace(' ', '').toLowerCase();
}
console.log(pageStrings);
return pageStrings;
}
答案 0 :(得分:7)
var pageStrings = pages;
正在创建对同一个数组对象的引用。当您通过pageString
访问它时,您将更改pages
所引用的同一对象。要create a copy的{{3}}(然后你可以拼接,分配属性等,而不改变pages
),使用
var pageStrings = pages.slice();
答案 1 :(得分:1)
我认为你的困惑在于以下几行
var pageStrings = pages;
这不会创建pages
的副本,只会创建对pages
的引用。这意味着您对pageStrings
(清除,更改元素等)的值所做的任何编辑都会显示在pages
上,因为它们引用相同的变量。
如果您希望pageStrings
拥有pages
数组的副本,请执行以下操作
var pageStrings = pages.slice(0);
答案 2 :(得分:1)
var pageStrings = pages;
是你的挂断。请记住,当您以这种方式使用=
时,如果右侧的参数是数组,对象或函数,则新的var将成为引用。使用字符串和数字,您将获得您期望的副本。