javascript - 函数正在重写变量。这怎么可能?

标签 javascript arrays function

这个函数似乎正在重写“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;

}

最佳答案

var pageStrings = pages;

正在创建对同一数组对象的引用。当您通过 pageString 访问它时,您更改了 pages 所引用的同一对象。至create a copy的(然后您可以从中拼接、分配属性等,而无需更改页面),使用

var pageStrings = pages.slice();

关于javascript - 函数正在重写变量。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136192/

相关文章:

c++ - 二维数组的数组

mysql - nodejs mysql查询标识符 '?'错误,但连接查询工作

javascript - 在 Javascript 中创建一个表

javascript - 单击浏览器的后退按钮时,页面不会通过应用新 URL 自动加载

c++ - OpenCV:二维数组到 MAT 转换后 MAT 中的垃圾值

javascript - 无法推送到数组对象

javascript - 链接 connect/mapStateToProps/mapDispatchToProps 函数以在 react-redux 中重用代码

javascript - React 在 this.props.children 上设置默认 Props

c++ - 对这种语法感到困惑

java - Java 中三角函数优化性能提升