javascript - 检测 JavaScript 中的重复对象属性

标签 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: [],
        });
    },

}

最佳答案

只需遍历数组并检查它是否还没有包含该 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
}

关于javascript - 检测 JavaScript 中的重复对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781314/

相关文章:

javascript - JQuery 在点击事件中获取输入框的值

javascript - 如何将 vue 应用程序包含在另一个 vue 应用程序中?

javascript - 绘图 : stackedgraph is used per-series?

javascript - 使用sequelize ownTo 和 hasOne 会导致超出最大调用堆栈大小

JavaScript 正则表达式重构

Javascript 发布到窗口

javascript - Twitter Typeahead.js, "one of local, prefetch, or remote is required",即使提供

javascript - 如何使用node webkit js写入文件?

javascript - 查找div中所有html元素

Javascript - 替换特殊字符中的字符串的一部分