【问题标题】:How to compare two arrays and remove unmatched record如何比较两个数组并删除不匹配的记录
【发布时间】:2021-03-01 04:59:52
【问题描述】:

我有两个数组,我想通过对象索引 {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: ""}
]

注意:正如您在数组 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"}
    ]

【问题讨论】:

  • 嗨,您需要从数组 1 中删除对象吗?

标签: javascript arrays reactjs ecmascript-6


【解决方案1】:

这个函数接受两个数组,left 和 right。它返回左过滤以仅包含右数组的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);

【讨论】:

    【解决方案2】:
    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)
    

    【讨论】:

    • 这种方法在结果数组中生成undefined 项,而不是删除它们。
    • 这很奇怪,因为我在操场上进行了测试,它返回了正确的结果数组
    【解决方案3】:

    你可以这样做:

    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)

    【讨论】:

    • 可能想把id换成index
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多