Javascript - 合并具有唯一结果的二维数组

时间:2014-02-07 06:31:31

标签: javascript arrays

我在Javascript中有这两个数组

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

我想将这个2数组合并为唯一值,如下所示,

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

我尝试了concat功能,但它没有按预期工作。

2 个答案:

答案 0 :(得分:2)

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

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

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

[1] != [1]起,您必须手动比较它们。 JSON.stringify是一种(hacky)方式。

答案 1 :(得分: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]]