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]
即。元素应该是唯一的,并且以我提到的相同方式排序。
请帮忙。
答案 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)
所以你可以使用任何部分,以防万一。