我有两个数组,我想通过对象索引{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"}
]
此函数接受左右两个数组。它返回左过滤,以仅包括右数组的index
s中具有index
s的项。
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)