Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery中合并两个数组、存储唯一元素和排序_Javascript_Jquery_Arrays_Merge - Fatal编程技术网

Javascript 在jQuery中合并两个数组、存储唯一元素和排序

Javascript 在jQuery中合并两个数组、存储唯一元素和排序,javascript,jquery,arrays,merge,Javascript,Jquery,Arrays,Merge,我正在尝试合并这两个数组,输出结果是[1,3,4,5,6,4,5,6] 我使用了$.merge(Arr1,Arr2)此片段以合并它们。使用alert,我可以看到如上所示的合并阵列 现在我的问题是如何获得以下输出: [1,3,4,5,6,8,9,10] i、 e.元素应该是唯一的,并且按照我提到的相同方式进行排序 请帮忙。这看起来像是一份适合你的工作 var arr3=arr1.slice(),//克隆arr1以便无副作用 i、 //所以它不是全球性的 对于(i=0;i

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

我使用了
$.merge(Arr1,Arr2)此片段以合并它们。使用alert,我可以看到如上所示的合并阵列

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

i、 e.元素应该是唯一的,并且按照我提到的相同方式进行排序


请帮忙。

这看起来像是一份适合你的工作

var arr3=arr1.slice(),//克隆arr1以便无副作用
i、 //所以它不是全球性的
对于(i=0;i
使用下划线.js:

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]
这个例子直接取自一个流行的JS库,它补充了jQuery

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]).sort(function(a,b){return a-b});
=> [1, 2, 3, 10, 101]
更新: 这是一个坏主意,因为“unique”函数不适用于数字或字符串。 但是,如果必须这样做,则需要告知排序函数使用新的比较器,因为默认情况下,它按字典顺序排序。

您可以使用进行真正的数字排序,并使用仅返回唯一的元素

可以将其包装到类似以下内容的帮助器中:

a = [1, 2, 3]
b = [2, 3, 4]
$.unique($.merge(a, b)).sort(function(a,b){return a-b}); -> [1, 2, 3, 4]
arall
现在将是
[1,3,4,5,6,8,9,10]


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



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

合并两个或多个数组+删除重复项+排序()


我这样做如下,其中t1和t2是我的两个表

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

jQuery.unique([].concat.apply([],[[1,2,3,4],[1,2,3,4,5,6],[3,4,5,6,7,8]])).sort();
函数排序(矩阵){
if(matrix.length<1 | | matrix[0].length<1)返回[];
常量结果=[];
让temp,ele;
而(矩阵长度>0){
温度=0;
for(设j=0;j result[result.length-1]){
结果.push(矩阵[temp].拼接(0,1)[0]);
}否则{
矩阵[temp]。拼接(0,1);
}
如果(矩阵[temp].length==0)矩阵拼接(temp,1);
}
返回结果;
}
日志(sortUnique([[1,4,8],[2,4,9],[1,2,7]]))

使用JavaScript ES6使其更简单、更干净。试试这个:

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]]))
就在这里。您可以在如下函数中构建它:

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]
最后,现在对uniqueValue对象进行排序:

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

因此,您可以使用任何部分,以防万一。

仅使用javascript的一行解决方案

var Arr1=[1,3,4,5,6];
var Arr2=[4,5,6,8,9,10];
const sortedUnion=[…新集合([…Arr1,…Arr2]。排序((a,b)=>a-b))]

console.log(sortedUnion)
您能解释一下吗?前两行我不明白。。。waiting@Monibrata添加注释感谢您的解释。。。但是使用这段代码,我有[1,3,4,4,5,5,6,6,8,9,10]这样的输出,它显示的是[1,10,3,4,5,5,6,6,6,6,8,9],而我需要[1,3,4,5,6,8,9]哈哈,是的,结果是按字典排序的,我的错。虽然不是sort()函数在执行此操作吗?(排序函数是否按字典顺序进行排序)
[1,2,3,101,10]
,似乎排序不正确,因为OP还希望对最终结果进行排序。
return [...Arr1, ...Arr2].filter((v,i,s) => s.indexOf(v) === i).sort((a,b)=> a - b);
function mergeUniqueSort(Arr1, Arr2){
    return [...Arr1, ...Arr2].filter((v,i,s) => s.indexOf(v) === i).sort((a,b)=> a - b);
}
let combinedArrays = [...Arr1, ...Arr2]
let uniqueValues = combinedArrays.filter((value, index, self ) => self.indexOf(value) === index)
let sortAscending  = uniqueValues.sort((a-b) => a - b)   // 1, 2, 3, ....10
let sortDescending = uniqueValues.sort((b-a) => b - a)   // 10, 9, 8, ....1