使用grep,filter或each来执行2个数组的交集

时间:2017-06-28 02:15:46

标签: javascript jquery

我正在努力在JQuery中有效地合并2个数组。本质上我应该合并2个数组但如果存在'元素冲突',则array1优先。我认为我正在做的是一个交叉点,其中array1具有预测性?

我不清楚的是,我是否应该使用2个嵌套$.each()语句来实现我的目标,或者我是否可以使用$.grep()$.filter()来实现我的目标高效的庄园?有什么建议吗?

下面解释了我在代码中的目标:

var customMenuBtns = [
    {
        name: 'addText',
        callback: ...
    },
    {
        name: 'trash',
        callback: function() {   // My custom trash callback
            console.log("Custom trash");
        }
    }
];


var defMenuBtns = [
    {
        name: 'addComponent',
        callback: ...
    },
    {
        name: 'trash',
        callback: ...
    }
];



// Merge customMenuBtns and defMenuBtns. 
// If both arrays contain a button with the same name; we discard the 
// defMenuBtns and keep the customMenuBtns

// So in the above example; after merging we should have

var menuBtns = [
    {
        name: 'addText',
        callback: ...
    },
    {
        name: 'trash',
        callback: function() {   // My custom trash callback
            console.log("Custom trash");
        }
    },
    {
        name: 'addComponent',
        callback: ...
    }
];

2 个答案:

答案 0 :(得分:0)

非jquery解决方案应该起作用并保持秩序。您可能希望添加一些“检查属性名称”步骤,具体取决于您对名称元素的存在的信心。

Locale locale = new Locale("ja", "JP", "JP");
Calendar calendar = Calendar.getInstance(locale);
calendar.set(Calendar.YEAR, 1);
Date date = calendar.getTime();

DateFormat format1
        = new SimpleDateFormat("GGGGy年", locale);
System.out.println("y: " + format1.format(date));

DateFormat format2
    = new SimpleDateFormat("GGGGyy年", locale);
System.out.println("yy: " + format2.format(date));

DateFormat format3
    = new SimpleDateFormat("GGGGyyy年", locale);
System.out.println("yyy: " + format3.format(date));

DateFormat format4
    = new SimpleDateFormat("GGGGyyyy年", locale);
System.out.println("yyyy: " + format4.format(date));

答案 1 :(得分:0)

我认为你需要函数$ .extends

var menuBtns = $.extend({}, defMenuBtns, customMenuBtns);

将两个或多个对象的内容合并到第一个对象中。

有关详细信息,请查看jquery文档here 您也可以使用它来将数组与对象合并

我认为你在这里有一个完整的例子

var customMenuBtns = [
    {
        name: 'addText',
        callback: function(){}
    },
    {
        name: 'addComponent',
        callback: function(){}
    },
    {
        name: 'trash',
        callback: function() {   // My custom trash callback
            console.log("Custom trash");
        }
    }
];

var defMenuBtns = [
    {
        name: 'addText',
        callback: function(){}
    },
    {
        name: 'addComponent',
        callback: function(){}
    },
    {
        name: 'trash',
        callback: function(){}
    }
];

var menuBtns = $.extend([], defMenuBtns, customMenuBtns);
console.log(menuBtns);