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