如何在匹配键值的基础上比较不同长度和关键字的两个数组



我已经尝试过了,但它给出了正确的结果

阵列1

Array1: [
{
id: 2,
city: 'washington',
code: 0099,
room: 5,
...
},
{
...
},
...
]

阵列2

Array2: [
{
"id": 2,
"name": "john"
"number": 727625,
"etage": 5,
"status": 0,
...
},
{
...
},
...
]

我的代码

let Result = [];
if (Array1 && Array1.length > 0 && Array2 && Array2.length > 0) {       
Array1.forEach((arr1, index) => {
Array2.forEach((arr2, index) =>{              
if (arr1.id === arr2.id && arr1.room === arr2.etage) {
Result.push(arr1)
}
})
})
}
console.log(Result)

我想要什么

通过比较两个数组,我想要Array1的项(对象(,其中两者都具有相同的id&Array1的对象中的房间等于etage来自Array2的对象。

请指导我,我如何在React js中以ES6风格做到这一点?

嵌套循环的主要问题是第一个数组的每个元素的不必要迭代和第二个数组的多次迭代。

这种方法需要两个循环,一个用于从array2生成所有密钥,另一个用于过滤array1

您可以为idetage的复合键取一个Set,并过滤数组以获得具有相同idroom的项。

const
getKey = (...values) => values.join('|'),
keys = new Set(array2.map(({ id, etage }) => getKey(id, etage))),
result = array1.filter(({ id, room }) => keys.has(getKey(id, room));

条件为

room > etage

以及CCD_ 8。

const
ids = array2.reduce(
(m, { id, etage }) => m.set(id, Math.min(etage, m.get(id) || 0)),
new Map
),
result = array1.filter(({ id, room }) => room > ids.get(id));

我会这样做:

Array1= [
{
id: 2,
city: 'washington',
code: 0099,
room: 5,
}

];
Array2= [
{
"id": 2,
"name": "john",
"number": 727625,
"etage": 5,
},
];

const result = Array1.filter(a1 => Array2.find(a2 => a1.id == a2.id) && Array2.find(a2 => a1.room ==  a2.etage));

console.log(result);

这将返回一个按房间、标签和id过滤的数组。

您可以使用filtersomeES6方法:

const arr1 = [
{
id: 1,
room: 1
},
{
id: 2,
room: 5
},
{
id: 3,
room: 3
}
];
const arr2 = [
{
id: 0,
etage: 0
},
{
id: 2,
etage: 5
},
{
id: 3,
etage: 3
}
];
const getTheSame = (arr1, arr2) => {
return arr1.filter(o1 =>
arr2.some(o2 => o1.id === o2.id && o1.room === o2.etage)
);
};
console.log("Result: ", getTheSame(arr1, arr2));

最新更新