在JavaScript

时间:2016-11-24 08:29:58

标签: javascript

基于如下的快速模型,我需要将URL路由对象添加到我的应用程序中的Array属性。

addAppRoute(routeObbj)下面的函数中我想添加一个检查,以查看添加的新路由是否已存在于属性this.cache.webDevAppRoutes

如何确保不添加重复项?它需要基于重复的moduleaction是相同的

var app = {
    cache: {
        webDevAppRoutes: [],
    },

    addAppRoute: function(route) {
        var routes = this.cache.webDevAppRoutes;
        routes.push(route);
    },

    getAppRoutes: function() {
        var routes = this.cache.webDevAppRoutes;
        console.log(routes);
    },

    addBookmarkAppRoutes: function() {

        this.addAppRoute({
            module: 'bookmarks',
            action: 'view',
            params: [{
                id: 123
            }],
        });

        this.addAppRoute({
            module: 'bookmarks',
            action: 'edit',
            params: [{
                id: 123
            }],
        });

        this.addAppRoute({
            module: 'bookmarks',
            action: 'add',
            params: [],
        });
    },

}

2 个答案:

答案 0 :(得分:2)

只需遍历数组并检查它是否已经包含moduleaction的条目。您可以使用Array#some,例如:

if (routes.some(function(r) { return r.module == route.module && r.action == route.action)) {
    // It's a duplicate
}
一旦对其回调的调用返回真值,

Array#some就会返回true;否则,它返回false

在ES2015中,这更简洁:

if (routes.some(r => r.module == route.module && r.action == route.action)) {
    // It's a duplicate
}

答案 1 :(得分:1)

只有Map已经添加的路线:



var webDevAppRoutes = new Map();


function addAppRoute(route) {
    var key = [route.module, route.action].join();

    if(!webDevAppRoutes.has(key))
        webDevAppRoutes.set(key, route);
}

addAppRoute({
    module: 'bookmarks',
    action: 'view',
    params: [{
        id: 123
    }],
});

addAppRoute({
    module: 'bookmarks',
    action: 'edit',
    params: [{
        id: 123
    }],
});

addAppRoute({
    module: 'bookmarks',
    action: 'add',
    params: [],
});

addAppRoute({
    module: 'bookmarks',
    action: 'add',
    params: 'once again',
});

console.log([...webDevAppRoutes.values()])




对于ES5,找一个polyfill或使用POJO而不是Map