Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何筛选出数组之间的匹配项,并添加额外的键/值?_Javascript_Arrays - Fatal编程技术网

Javascript 如何筛选出数组之间的匹配项,并添加额外的键/值?

Javascript 如何筛选出数组之间的匹配项,并添加额外的键/值?,javascript,arrays,Javascript,Arrays,我有两个包含对象的数组。每个对象都有一个键/值对“颜色”和“数字”。我想对照这两个数组查找与“数字”匹配的对象。找到这个后,我想向原始数组中的所有对象添加一个键值对 我有下面的例子,我相信这是正确的,但我正在努力找出如何继续 基本上,如果对象匹配,我想将“match”的K/V对更改为true或false const array1 = [ {color: 'red', number: 1, match: ''}, {color: 'red', number: 2, match: ''}, {col

我有两个包含对象的数组。每个对象都有一个键/值对“颜色”和“数字”。我想对照这两个数组查找与“数字”匹配的对象。找到这个后,我想向原始数组中的所有对象添加一个键值对

我有下面的例子,我相信这是正确的,但我正在努力找出如何继续

基本上,如果对象匹配,我想将“match”的K/V对更改为true或false

const array1 = [ {color: 'red', number: 1, match: ''}, {color: 'red', number: 2, match: ''}, {color: 'red', number: 3, match: ''} ]
const array2 = [ {color: 'red', number: 3, match: ''}, {color: 'blue', number: 5, match: ''}, {color: 'blue', number: 6, match: ''} ]

async function findMatchingObjects(array1, array2){
    const matchCheck = array1.filter(matchedObj => array2.includes(matchedObj));
  console.log(matchCheck);
}

findMatchingObjects(array1, array2);
预期产出将是:

const array3 = [{
  color: 'red',
  number: 1,
  match: 'false'
}, {
  color: 'red',
  number: 2,
  match: 'false'
}, {
  color: 'red',
  number: 3,
  match: 'true'
},
{
  color: 'red',
  number: 3,
  match: 'true'
}, {
  color: 'blue',
  number: 5,
  match: 'false'
}, {
  color: 'blue',
  number: 6,
  match: 'false'
}]

除了在array2中检查array1和array2中检查array1之外,我无法以其他方式思考。之前将这两个数组合并可以处理误报

const array1=[{color:'red',number:1,匹配:'},{color:'red',number:2,匹配:'},{color:'red',number:3,匹配:'}]
const array2=[{color:'red',number:3,match:'},{color:'blue',number:5,match:'},{color:'blue',number:6,match:'}]
函数检查匹配按编号(arr1、arr2){
返回arr1.map(x=>(arr2.filter(y=>y.number==x.number).length>0?x.match=true:x.match=false,x));
}
设resp=[].concat(checkMatchesByNumbers(array1,array2),checkMatchesByNumbers(array2,array1));

console.log(resp)
您可以使用
map
some

这是我的想法

  • 首先在临时变量中合并两个数组
  • 获取变量中第一个数组的长度
  • 现在映射到合并数组,对于小于
    length1的每个索引,将其与
    array2
    匹配,否则将其与
    array1
const array1=[{color:'red',number:1,匹配:'},{color:'red',number:2,匹配:'},{color:'red',number:3,匹配:'}]
const array2=[{color:'red',number:3,match:'},{color:'blue',number:5,match:'},{color:'blue',number:6,match:'}]
设温度=[…阵列1,…阵列2]
let length 1=阵列1.长度
设op=temp.map((inp,index)=>({…inp,match:(indexnumber==inp.number)}))

console.log(op)
假设您确实希望保留重复项,就像您提供的预期输出一样,我会这样做:

let t=[…array1,…array2]
返回t.map(项=>{
item.match=t.filter(i=>{i.number===item.number})。长度>1
})
您可以使用
map()
find()

const array1=[{color:'red',number:1,匹配:'},{color:'red',number:2,匹配:'},{color:'red',number:3,匹配:'}]
const array2=[{color:'red',number:3,match:'},{color:'blue',number:5,match:'},{color:'blue',number:6,match:'}]
函数检查匹配(arr1、arr2){
返回arr1.map(x=>arr2.find(a=>a.number===x.number)?({…x,匹配:'true'}):({…x,匹配:'false'});
}
设res=[…checkMatches(array1,array2),…checkMatches(array2,array1)]

console.log(res)
预期输出?@CodeManiac addedWhy您的函数声明为
async
?中没有
async
操作there@gbalduzzi这些数组来自于我的完整代码中的承诺,您应该使用
array1.reduce()
。在减速机内部,您可以在
array2
上执行另一个循环,比较值并根据需要更改
array1
的对象,以在
array3
中输出所需内容。这几乎就是它的全部。为了可重用性,如果只匹配
number
的话,它会工作吗?这就是为什么我最初研究的是
过滤器
@knockedloose你所说的
是什么意思?如果只有匹配的数字,这能起作用吗如果没有匹配的数字,它将简单地将匹配设置为false,如果arr1有一个对象
{color:'red',number:1,match:'}
其中arr2有
{color:'blue',number:1,match:'}
。这会被视为一个匹配,还是它看起来与整个对象匹配?@knockedflose它会匹配,因为我们只是根据数字而不是名称进行匹配。这是您在问题中指定的内容。您可以使用
name&&number
如果您希望两者都必须匹配caseAh,可以理解,这真的很简洁明了,谢谢您花时间来帮助!