JavaScript - 合并二维数组并去重

3

I have this two array in Javascript

var array1 = [
              ["Tech & Digital", 124],
              ["Stationery", 100]
             ]
var array2 = [
              ["Gift Item", 125],
              ["Stationery", 100]
             ]

我希望将这两个数组合并,其唯一值如下所示,
            [
              ["Tech & Digital", 124],
              ["Stationery", 100],
              ["Gift Item", 125]
             ]

我尝试使用concat函数,但它并没有按照预期工作。


2
https://dev59.com/BHI-5IYBdhLWcg3w-9wK - Vinay Pratap Singh Bhadauria
由于没有“内置”的方法来删除重复项,因此您必须自己实现它。 - Vinayak Pingale
2个回答

2

您是否使用嵌套数组来模拟保留顺序的对象?如果是这样,请编写一个容器对象,该对象可以处理排序。

如果没有,您可以使用Underscore或Lo-Dash:

_.uniq(_.union(array1, array2), false, JSON.stringify)

由于 [1] != [1],你必须手动进行比较。 JSON.stringify 是一种(巧妙的)方法。


我们能不能不用 UnderscoreLo-Dash 来完成这个任务? - iLaYa ツ

1

您知道,我相信其他人可以用 jQuery 制作出更为流畅的内容,但这是我尝试的方式。

var array1 = [
              ["Tech & Digital", 124],
              ["Stationery", 100]
             ]
var array2 = [
              ["Gift Item", 125],
              ["Stationery", 100]
             ]
var obj = {}
jQuery.map(array1.concat(array2),function(i,v){return obj[i[0]] = i[1] })
array1 = jQuery.map(obj, function(j,w){
       return [].concat([[w,j]]);
    })

这是相同的内容,但修改为非库解决方案。在 ECMAScript5 之前。

var arr = array1.concat(array2), obj = {};
for(var i = 0; i < arr.length; i++){
    obj[arr[i][0]] = arr[i][1];
}
array1 = function() {
      var arr = [];
      for(key in obj){
       arr.push([[key,obj[key]]])
      }
      return arr;
}()

两者都返回:

[["Tech & Digital", 124], ["Stationery", 100], ["Gift Item", 125]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接