合并两个数组,存储唯一元素,并在jQuery中进行排序

时间:2014-03-05 20:53:04

标签: javascript jquery arrays merge

var Arr1 = [1,3,4,5,6];

var Arr2 = [4,5,6,8,9,10];

我正在尝试合并这两个数组,输出来的是[1,3,4,5,6,4,5,6]

我已经使用$.merge(Arr1, Arr2);这篇文章来合并它们。使用alert我可以看到如上所示的合并数组。

现在我的问题是如何获得以下输出: [1,3,4,5,6,8,9,10]

即。元素应该是唯一的,并且以我提到的相同方式排序。

请帮忙。

9 个答案:

答案 0 :(得分:9)

您可以使用Array.prototype.sort()进行真正的数字排序,并使用Array.prototype.filter()仅返回唯一元素。

您可以将其包装成类似于此的帮助程序:

var concatArraysUniqueWithSort = function (thisArray, otherArray) {
    var newArray = thisArray.concat(otherArray).sort(function (a, b) {
        return a > b ? 1 : a < b ? -1 : 0;
    });

    return newArray.filter(function (item, index) {
        return newArray.indexOf(item) === index;
    });
};

请注意,自定义排序功能仅适用于数字元素,因此,如果您想将其用于字符串或将字符串与数字混合,则必须更新它,以便将这些方案考虑在内,尽管其余部分不应更改

像这样使用:

var arr1 = [1, 3, 4, 5, 6];
var arr2 = [4, 5, 6, 8, 9, 10];

var arrAll = concatArraysUniqueWithSort(arr1, arr2);

arrAll现在为[1, 3, 4, 5, 6, 8, 9, 10]


DEMO - 连接2个数组,排序和删除重复项


我确信有很多方法可以做到这一点。这只是我能想到的最简洁。

答案 1 :(得分:3)

合并两个或多个数组+删除重复+ sort()

jQuery.unique([].concat.apply([],[[1,2,3,4],[1,2,3,4,5,6],[3,4,5,6,7,8]])).sort();

答案 2 :(得分:1)

仅使用 javascript 的单行解决方案。

propB

答案 3 :(得分:0)

这看起来像是Array.prototype.indexOf

的工作
var arr3 = arr1.slice(),              // clone arr1 so no side-effects
    i;                                // var i so it 's not global
for (i = 0; i < arr2.length; ++i)     // loop over arr2
    if (arr1.indexOf(arr2[i]) === -1) // see if item from arr2 is in arr1 or not
        arr3.push(arr2[i]);           // it's not, add it to arr3
arr3.sort(function (a, b) {return a - b;});
arr3; // [1, 3, 4, 5, 6, 8, 9, 10]

答案 4 :(得分:0)

使用underscore.js:

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]).sort(function(a,b){return a-b});
=> [1, 2, 3, 10, 101]

此示例直接来自underscore.js,这是一个流行的JS库,它补充了jQuery

答案 5 :(得分:0)

a = [1, 2, 3]
b = [2, 3, 4]
$.unique($.merge(a, b)).sort(function(a,b){return a-b}); -> [1, 2, 3, 4]

更新: 这是一个坏主意,因为“独特”功能不适用于数字或字符串。 但是,如果必须,则需要告诉sort函数使用新的比较器,因为默认情况下它按字典顺序排序。

答案 6 :(得分:0)

我按照以下方式做到了,其中t1和t2是我的两张桌子。

第一个命令将表t2的值放到t1。第二个命令从表中删除重复的值。

$.merge(t1, t2);
$.unique(t1);

答案 7 :(得分:0)

function sortUnique(matrix) {
  if(matrix.length < 1 || matrix[0].length < 1) return [];
  const result = [];
  let temp, ele;
  while(matrix.length > 0) {
    temp = 0;
    for(let j=0; j<matrix.length; j++) {
      if(matrix[j][0] < matrix[temp][0]) temp = j;
    }
    if(result.length === 0 || matrix[temp][0] > result[result.length-1]) {
      result.push(matrix[temp].splice(0,1)[0]);
    } else {
      matrix[temp].splice(0,1);
    }
    if(matrix[temp].length===0) matrix.splice(temp, 1);
  }
  return result;
}

console.log(sortUnique([[1,4,8], [2,4,9], [1,2,7]]))

答案 8 :(得分:0)

使用 JavaScript ES6 可以更轻松、更简洁。试试这个:

[(('10.20.30.40', ' 10.50.20.30'), 2)]

你有它。您可以在如下函数中构建它:

return [...Arr1, ...Arr2].filter((v,i,s) => s.indexOf(v) === i).sort((a,b)=> a - b);

这就解决了。你也可以使用 ES6 分解它。使用扩展运算符组合数组:

function mergeUniqueSort(Arr1, Arr2){
    return [...Arr1, ...Arr2].filter((v,i,s) => s.indexOf(v) === i).sort((a,b)=> a - b);
}

然后使用 let combinedArrays = [...Arr1, ...Arr2] 函数获取唯一元素:

filter

最后,您现在对 uniqueValue 对象进行排序:

let uniqueValues = combinedArrays.filter((value, index, self ) => self.indexOf(value) === index)

所以你可以使用任何部分,以防万一。