如何比较两个数组并删除不匹配的记录



我有两个数组,我想通过对象索引{index:...}来比较这两个数组。若索引不匹配,那个么我想从数组中删除那个对象。

阵列1

[
Text Field 32: {fieldName: "Text Field 32", fieldType: "text", index: 0, data: "valu1"},
Text Field 53: {fieldName: "Text Field 53", fieldType: "text", index: 1, data: ""},
Text Field 64: {fieldName: "Text Field 64", fieldType: "text", index: 2, data: "value 3"},
Text Field 65: {fieldName: "Text Field 65", fieldType: "text", index: 3, data: "value 4"}
]

阵列2

[
Text Field 32: {fieldName: "Text Field 32", fieldType: "text", index: 0, data: ""},
Text Field 64: {fieldName: "Text Field 64", fieldType: "text", index: 2, data: ""},
Text Field 65: {fieldName: "Text Field 65", fieldType: "text", index: 3, data: ""}
]

注意:如您在Array 2中看到的,缺少{index:1}。有人能帮助我如何删除不匹配的对象吗。

预期结果

[
Text Field 32: {fieldName: "Text Field 32", fieldType: "text", index: 0, data: "valu1"},
Text Field 64: {fieldName: "Text Field 64", fieldType: "text", index: 2, data: "value 3"},
Text Field 65: {fieldName: "Text Field 65", fieldType: "text", index: 3, data: "value 4"}
]

此函数接受左右两个数组。它返回左过滤,以仅包括右数组的indexs中具有indexs的项。

function matching(left, right) {
const right_indices = right.map(r=>r.index);
return left.filter(l=>right_indices.includes(l.index))
}

请注意,我不是在修改原始数组。

所以,如果你有:


var Array1 = [...blahblah];
var Array2 = [...blahblah];
// You need to reassign Array1:
Array1 = matching(Array1, Array2);
const arr1: any = [
{fieldName: "Text Field 32", fieldType: "text", index: 0, data: "valu1"},
{fieldName: "Text Field 53", fieldType: "text", index: 1, data: ""},
{fieldName: "Text Field 64", fieldType: "text", index: 2, data: "value 3"},
{fieldName: "Text Field 65", fieldType: "text", index: 3, data: "value 4"}
]
const arr2: any  = [
{fieldName: "Text Field 32", fieldType: "text", index: 0, data: ""},
{fieldName: "Text Field 64", fieldType: "text", index: 2, data: ""},
{fieldName: "Text Field 65", fieldType: "text", index: 3, data: ""}
]

const updatedArr = arr1.map((arrItem: any) => {
const sameValue = arr2.find((arr2Item: any) => {
return arrItem.index === arr2Item.index
})
if (sameValue) return sameValue 
})
console.log(updatedArr)

您可以这样做:

var firstArray = [
{fieldName: "Text Field 32", fieldType: "text", index: 0, data: "valu1"},
{fieldName: "Text Field 53", fieldType: "text", index: 1, data: ""},
{fieldName: "Text Field 64", fieldType: "text", index: 2, data: "value 3"},
{fieldName: "Text Field 65", fieldType: "text", index: 3, data: "value 4"}
];
var secondArray = [
{fieldName: "Text Field 32", fieldType: "text", index: 0, data: ""},
{fieldName: "Text Field 64", fieldType: "text", index: 2, data: ""},
{fieldName: "Text Field 65", fieldType: "text", index: 3, data: ""}
]
var result = secondArray.filter(x => firstArray.find(y=>y.index == x.index));

console.log(result)

最新更新