在javascript中搜索具有重复值的两个数组中的匹配值
search for matching values in two arrays with repeated values in javascript
我有两个数组:
a = [2,2,3,0,6]
b = [6,3,2,2,0]
我正在尝试使用for循环来匹配值,并在新的数组c中获取a的索引。我们该如何做到这一点?请注意,有多个值匹配,因此我认为必须跳过上一个匹配。
这是一个尊重最后一个索引并进一步研究的建议。
工作原理:
它使用
Array#map
来迭代带有回调的数组b
。map得到一个自己的CCD_ 3空间,其中有一个真正空的对象CCD_。回调具有参数
bb
,它是`b的一个元素。接下来是基于前面的搜索,找到具有
Array#indexOf
和fromIndex
的数组a
中的元素。前一个索引存储在this
对象中,只要结果不是-1
,因为这会将fromIndex
重置为零。如果没有
this[bb]
或this[bb]
的错误值,则取零作为fromIndex
。随后,将找到的
index
递增并存储在this[bb]
中。至少,会返回索引。
var a = [2, 2, 3, 0, 6],
b = [6, 3, 2, 2, 0],
c = b.map(function (bb) {
var index = a.indexOf(bb, this[bb] || 0);
if (index !== -1) {
this[bb] = index + 1;
}
return index;
}, Object.create(null));
console.log(c);
另一种解决方案可以是首先生成具有a
的所有索引的对象,并在b
的迭代中使用它来返回索引。
这个例子有点扩展,以显示如果不超过两个索引(2)和一个不在a
(7)中会发生什么。
具有
a
:所有索引的aObj的内容{ "0": [3], "2": [0, 1], "3": [2], "6": [4] }
var a = [2, 2, 3, 0, 6],
b = [6, 3, 2, 2, 0, 7, 2],
aObj = Object.create(null),
c;
a.forEach(function (aa, i) {
aObj[aa] = aObj[aa] || [];
aObj[aa].push(i);
});
c = b.map(function (bb) {
return aObj[bb] && aObj[bb].length ? aObj[bb].shift() : -1;
});
console.log(c);
据我所知,你可以试试这个:
var a = [2,2,3,0,6];
var b = [6,3,2,2,0];
var c = new Array();
for(i = 0; i < b.length; i++)
{
for(j = 0; j < a.length; j++)
{
if(b[i] === a[j] && c.indexOf(j) < 0)
{
c.push(j);
break;
}
}
}
console.log(c); // [4, 2, 0, 1, 3]
FIDDLE演示此处
如果我理解正确。
let c = a.map(i => b.indexOf(i))
或
var c = a.map(function(i) { return b.indexOf(i); });
循环.map
函数并通过indexOf
检查相同值
indexOf将返回一个数字,表示指定搜索值第一次出现的位置,如果从未出现,则返回-1
var arr = [];
a.map(function(v){
if(b.indexOf(v) > -1){
arr.push(v);
}
});
console.log(arr);
尝试类似的东西
var a = [2,2,3,0,6];
var b = [6,3,2,2,0];
var arrayLength_a = a.length;
var arrayLength_b = b.length;
var new_array=[];
for (var i = 0; i < arrayLength_a; i++)
{
for (var j = 0; j < arrayLength_b; j++)
{
if (a[i] == b[j])
{
if(new_array.indexOf(a[i]) === -1)
{
new_array.push(a[i]);
}
}
}
}
相关文章:
- 如何使用 node.js 比较两个 json 数组
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 访问$.ajax()函数中的两个不同数组
- 正在更新mongod中两个对象内部的数组
- 如何使用javascript合并两个对象数组
- 比较包含多个值对的两个JavaScript数组
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 检查来自不同数组的两个元素的一个属性是否相等
- 如何在javascript中合并两个对象数组
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 效率:整数数组的一个子集中两个项之间的最大差值
- 将两个值组合成extjs 4.1的形式
- 如何将中的两个geoJSON功能集合添加到两个层组中
- 在 JQuery 验证中验证多个“数组命名”文件输入和下拉列表
- 在一个区间之间生成两个随机数组
- 使用两个捕获组和JavaScript的replace()函数
- 通过找到两个重复组之一的正则表达式组
- 从Javascript中的两个子数组中获取随机结果
- 如何在一个可选的非捕获组中创建两个捕获组
- paper.js:获取两个层/组的原始像素数据