javascript - 在二维数组中查找比较

标签 javascript arrays compare shortcut

我正在尝试为 javascript 上的帖子列表创建快捷方式。 我有快捷方式和带有类别的帖子。

我需要通过快捷方式过滤帖子。 只是严格比较:

 ['Boxer', 'Terrier'] !== ['Boxer', 'Terrier', 'Bulldog']
 ['Boxer'] !== ['Boxer', 'Terrier', 'Bulldog']
 ['Boxer', 'Terrier'] === ['Boxer', 'Terrier']
 ['Boxer', 'Terrier'] === ['Terrier', 'Boxer']
 ['Boxer'] === ['Boxer']

我选择了这个选项,但我认为它的代码质量很差:

var allPosts = [
    {
        categories: [
            ['cats'],
            ['Cymric', 'Persian']
        ],
        id: 1,
            title: 'Cats',
            message: 'Cymric, Persian'
        },
        {
            categories: [
                ['dogs'],
                ['Boxer', 'Terrier']
            ],
            id: 2,
            title: 'Dogs',
            message: 'Boxer, Terrier'
        },
        ...
    ]
var shortcutCategories = [
        ['dogs'],
        ['Boxer', 'Terrier']
    ]
var displayedPosts = [];
var displayedPostsId = [];

shortcutCategories.forEach(function (shortcutSetOfCategory) {
    if (shortcutSetOfCategory.length > 1) {
        var internalCompare = false;
        allPosts.forEach(function (post) {
            post.categories.forEach(function (postSetOfCategory) {
                if (postSetOfCategory.length > 1) {
                    shortcutSetOfCategory.every(function (shortcutCategory) {
                        internalCompare = postSetOfCategory.includes(shortcutCategory);
                        return internalCompare;
                    });
                    if (!internalCompare) {
                        return;
                    }
                    displayedPostsId.push(post.id);
                }
            });
        });
    } else {
        allPosts.forEach(function (post) {
            post.categories.forEach(function (postSetOfCategory) {
                if (postSetOfCategory.length === 1) {
                    if (shortcutSetOfCategory[0] === postSetOfCategory[0]) {
                        displayedPostsId.push(post.id);
                    }
                }
            });
        });
    }
});

allPosts.forEach(function (post) {
    var count = 0;
    displayedPostsId.forEach(function (id) {
        if (id === post.id)
            count++;
    });

    if (shortcutCategories.length === count) {
        displayedPosts.push(post);
    }
});

最佳答案

我认为你可以使用 JSON.stringify 来比较二维数组

JSON.stringify(['Boxer', 'Terrier']) === JSON.stringify(['Boxer', 'Terrier']);

关于javascript - 在二维数组中查找比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50252193/

相关文章:

javascript - PouchDB数据销毁后未删除

javascript - 如何将 <Tag> 放入 src/href 中

javascript - 只允许 3 个号码

javascript - instagram/media/recent api 仅获取 lastone 图像

Java:我的 split 方法有问题

JavaScript 字符串作为数组 : Read but no Write

mysql - 将 yymmdd 日期与今天进行比较

arrays - 二进制搜索(样条应用程序)

unix - 如何在 Unix 上比较 2 个文件夹的权限?

java - 在 if 语句的方法中比较数组列表的元素