如何在jquery或javascript中从两个不同的数组中查找唯一记录
How to find unique records from two different array in jquery or javascript?
我想从两个不同的数组中获取唯一值。
JavaScript 中的两个数组如下所示:
<script>
var a=new Array;
var b=new Array;
a={'a','b','c','d','e'}
b={'a','d','e','c'}
</script>
我想要这样的输出:
new array => {'a','c','d','e'}
如何使用 JavaScript 原型函数或 jQuery 函数从两个数组中查找唯一记录?
你的术语是否正确。对我来说,唯一值将是仅在任一数组中出现一次的成员。根据您的示例,您似乎希望两个数组(公共值或交集)中都存在成员。
你可以使用 jQuery 来处理这个问题。 grep()
是你的朋友。
你可以在没有jQuery的情况下做到这一点,但我不确定本机filter()
和indexOf()
方法是否具有最好的浏览器支持。
var a = ['a', 'b', 'c', 'd', 'e'],
b = ['a', 'd', 'e', 'c'];
var common = $.grep(a, function(element) {
return $.inArray(element, b) !== -1;
});
console.log(common); // ["a", "c", "d", "e"]
使用下划线很容易_.intersection(arr1, arr2)
。
jsFiddle。
你真的想写:
<script type="text/javascript">
var a = ['a','b','c','d','e'];
var b = ['a','d','e','c'];
</script>
在任何情况下,您都可以对数组进行排序并从另一个数组中获取不在数组中的值,反之亦然,然后将两个集合连接为一个。你似乎被宠坏了,所以这里有一个不错的基本JavaScript版本,应该可以在大多数浏览器中使用。使用最新浏览器的新功能肯定会在旧浏览器中失败。
// Compares a to b. Returns all the elements in a that are not in b
// If c provided, add unique elements to c
function getUnique(a, b, c) {
var c = c || [];
var ta = a.slice().sort();
var tb = b.slice().sort();
var x, y, found = false;
for (var i=0, iLen=ta.length; i<iLen; i++) {
x = ta.shift();
for (var j=0; j<tb.length && !found; j++) { // j.length changes each loop
if (tb[j] == x) {
tb.splice(j,1); // Remove match from b
found = true;
}
}
if (!found) {
c.push(x); // If no match found, store in result
}
found = false;
}
return c;
}
var a = ['a','b','d'];
var b = ['b','e'];
var d = getUnique(a, b);
alert(d);
var c = getUnique(b,a,d);
alert(d);
但是您对第一个答案的评论表明您想要两个数组共有的元素,这更简单:
function getCommon(a, b) {
var c = [];
var ta = a.slice().sort();
var tb = b.slice().sort();
var t, found;
for (var i=0, iLen=ta.length; i<iLen; i++) {
t = ta[i];
found = false;
for (var j=0, jLen=tb.length; j<jLen && !found; j++) {
if (t == tb[j]) {
c.push(tb.splice(j,1));
found = true;
}
}
}
return c;
}
alert(getCommon(a, b));
您需要弄清楚如何处理重复项。在第一种情况下,如果另一个数组中没有重复项,则重复项将被视为唯一。在上面,重复项无关紧要,除非它们在两个数组中都是重复的。
查找原始答案:JavaScript数组差异
在这种情况下,您可以使用 Set。它针对此类操作(联合、交集、差分)进行了优化。
确保它适用于您的案例,一旦它不允许重复。
var a = new JS.Set([1,2,3,4,5,6,7,8,9]);
var b = new JS.Set([2,4,6,8]);
a.intersection(b);//intersect will give you the common one
像这样:
var a=['a','b','c','d','e']; //Use brackets
var b=['a','d','e','c']
var c = a.concat(b).sort();
var uniques = {};
for(var i=0; i<c.length; i++){
uniques[c[i]] = true;
}
var uniquesArray = [];
for(var u in uniques)
uniquesArray.push(u)
现在 uniquesArray 只包含唯一值。希望这有帮助
JavaScript中的关联数组支持的帮助下执行此操作。
<script>
var a=new Array;
var b=new Array;
a={'a','b','c','d','e'}
b={'a','d','e','c'}
var uniqueArray = new Array;
var tempArray = new Array;
var j = 0;
for(var i = 0; i < a.length; i++) {
if(!tempArray[a[i]]) {
tempArray[a[i]] = true;
uniqueArray[j++] = a[i];
}
}
for(i = 0; i < b.length; i++) {
if(!tempArray[b[i]]) {
tempArray[b[i]] = true;
uniqueArray[j++] = b[i];
}
}
</script>
- 如何使用 node.js 比较两个 json 数组
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 访问$.ajax()函数中的两个不同数组
- 正在更新mongod中两个对象内部的数组
- 如何使用javascript合并两个对象数组
- 比较包含多个值对的两个JavaScript数组
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 检查来自不同数组的两个元素的一个属性是否相等
- 如何在javascript中合并两个对象数组
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 效率:整数数组的一个子集中两个项之间的最大差值
- 将两个值组合成extjs 4.1的形式
- 如何将中的两个geoJSON功能集合添加到两个层组中
- 在 JQuery 验证中验证多个“数组命名”文件输入和下拉列表
- 在一个区间之间生成两个随机数组
- 使用两个捕获组和JavaScript的replace()函数
- 通过找到两个重复组之一的正则表达式组
- 从Javascript中的两个子数组中获取随机结果
- 如何在一个可选的非捕获组中创建两个捕获组
- paper.js:获取两个层/组的原始像素数据