如何在arr数组中找到与arr_1相同的对象

如何在arr数组中找到与arr_1相同的对象


let arr = [{
            "id": 41,
            "name": "详情一",
            "details": [{
                "index": 1,
                "name": "皮皮",
                "age": 32,
                "address": '南京市'
            }, {
                "index": 1,
                "name": "悠悠",
                "age": 33,
                "address": '琼海市'
            }, {
                "index": 2,
                "name": "涛涛",
                "age": 23,
                "address": '杭州市'
            }, {
                "index": 1,
                "name": "赵三",
                "age": 42,
                "address": '琼海市'
            }, {
                "index": 1,
                "name": "八八",
                "age": 21,
                "address": '北京市'
            }]
        }, {
            "id": 43,
            "name": "详情二",
            "details": [{
                "index": 1,
                "name": "张三",
                "age": 12,
                "address": '上海市'
            }, {
                "index": 1,
                "name": "李四",
                "age": 33,
                "address": '杭州市'
            }, {
                "index": 1,
                "name": "王五",
                "age": 21,
                "address": '南昌市'
            }, {
                "index": 1,
                "name": "赵六",
                "age": 32,
                "address": '南京市'
            }]
        }]

        let arr_1 = [{
            "index": 1,
            "name": "张三",
            "age": 12,
            "address": '上海市浦东新区'
        }, {
            "index": 1,
            "name": "李四",
            "age": 33,
            "address": '杭州市'
        }, {
            "index": 1,
            "name": "王五",
            "age": 21,
            "address": '南昌市'
        }, {
            "index": 1,
            "name": "赵六",
            "age": 32,
            "address": '南京市'
        }]

不知道具体是要实现什么效果,下面是将arr_1中项在arr 第几项和details中位置打印出来


<script>

    let arr = [{
        "id": 41,
        "name": "详情一",
        "details": [{
            "index": 1,
            "name": "皮皮",
            "age": 32,
            "address": '南京市'
        }, {
            "index": 1,
            "name": "悠悠",
            "age": 33,
            "address": '琼海市'
        }, {
            "index": 2,
            "name": "涛涛",
            "age": 23,
            "address": '杭州市'
        }, {
            "index": 1,
            "name": "赵三",
            "age": 42,
            "address": '琼海市'
        }, {
            "index": 1,
            "name": "八八",
            "age": 21,
            "address": '北京市'
        }]
    }, {
        "id": 43,
        "name": "详情二",
        "details": [{
            "index": 1,
            "name": "张三",
            "age": 12,
            "address": '上海市'
        }, {
            "index": 1,
            "name": "李四",
            "age": 33,
            "address": '杭州市'
        }, {
            "index": 1,
            "name": "王五",
            "age": 21,
            "address": '南昌市'
        }, {
            "index": 1,
            "name": "赵六",
            "age": 32,
            "address": '南京市'
        }]
    }]

    let arr_1 = [{
        "index": 1,
        "name": "张三",
        "age": 12,
        "address": '上海市浦东新区'
    }, {
        "index": 1,
        "name": "李四",
        "age": 33,
        "address": '杭州市'
    }, {
        "index": 1,
        "name": "王五",
        "age": 21,
        "address": '南昌市'
    }, {
        "index": 1,
        "name": "赵六",
        "age": 32,
        "address": '南京市'
        }]

    let result = [];
    arr_1.forEach((i, iIndex) => {
        arr.forEach((j, jIndex) => {
            var index = j.details.findIndex(k => k.name == i.name && k.age == i.age && k.address == i.address);//根据name,age,address一样判断为同一个人
            if (index != -1) {
                result.push(`arr_1第${iIndex + 1}${i.name}出现在arr第${jIndex + 1}项的details数组第${index + 1}项中`)
            }
        })
    });
    console.log(result)
</script>

该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以使用循环遍历arr数组,再对比每个元素的details数组是否包含arr_1数组中的所有对象,如果包含就返回该元素,否则返回null。示例代码如下:

function findArr(arr, arr_1) {
  for (let i = 0; i < arr.length; i++) {
    let details = arr[i].details;
    let found = arr_1.every(obj => {
      return details.some(detail => {
        return detail.name === obj.name && detail.age === obj.age && detail.address === obj.address;
      });
    });
    if (found) {
      return arr[i];
    }
  }
  return null;
}

let result = findArr(arr, arr_1);
console.log(result);


该函数会返回包含arr_1数组中所有对象的元素,如果没有匹配的元素则返回null。

以下答案引用自GPT-3大模型,请合理使用:

示例

//使用forEach方法可以循环arr_1,来查找在arr中是否存在与之相同的对象 
let newArr = [];
arr_1.forEach(item => {
  //标记arr_1中遍历到的当前对象是否存在arr中
  let isExisted = false; 
  //查找arr中是否有与之相同的对象
  arr.forEach(item_1 => {
    item_1.details.forEach(item_2 => {
      //如果当前item和item_2完全一致,说明存在与之相同的对象
      if (JSON.stringify(item_2) === JSON.stringify(item)) {
        newArr.push(item_2);
        isExisted = true;
      }
    })
  });
  // 如果数组arr中不存在相同的对象,那么就压入arr_1中遍历到的当前对象
  if (!isExisted) {
    newArr.push(item)
  }
});
  console.log(newArr);

如果我的回答解决了您的问题,请采纳我的回答

1、以下为人工手写亲测有效(望给个采纳,谢谢!)

img

<script type="text/javascript">
    let arr = [{
        "id": 41,
        "name": "详情一",
        "details": [{
            "index": 1,
            "name": "皮皮",
            "age": 32,
            "address": '南京市'
        }, {
            "index": 1,
            "name": "悠悠",
            "age": 33,
            "address": '琼海市'
        }, {
            "index": 2,
            "name": "涛涛",
            "age": 23,
            "address": '杭州市'
        }, {
            "index": 1,
            "name": "赵三",
            "age": 42,
            "address": '琼海市'
        }, {
            "index": 1,
            "name": "八八",
            "age": 21,
            "address": '北京市'
        }]
    }, {
        "id": 43,
        "name": "详情二",
        "details": [{
            "index": 1,
            "name": "张三",
            "age": 12,
            "address": '上海市'
        }, {
            "index": 1,
            "name": "李四",
            "age": 33,
            "address": '杭州市'
        }, {
            "index": 1,
            "name": "王五",
            "age": 21,
            "address": '南昌市'
        }, {
            "index": 1,
            "name": "赵六",
            "age": 32,
            "address": '南京市'
        }]
    }]

    let arr_1 = [{
        "index": 1,
        "name": "张三",
        "age": 12,
        "address": '上海市浦东新区'
    }, {
        "index": 1,
        "name": "李四",
        "age": 33,
        "address": '杭州市'
    }, {
        "index": 1,
        "name": "王五",
        "age": 21,
        "address": '南昌市'
    }, {
        "index": 1,
        "name": "赵六",
        "age": 32,
        "address": '南京市'
        }]

    // 三重循环法
    var sameArr = [];
    var length = arr.length;
    for (var i = 0; i < length; i++) {
        var dataDetails = arr[i].details;
        var lengthDetails = dataDetails.length;
        for (var j = 0; j < lengthDetails; j++) {
            var dataOne = dataDetails[j];
            for (var l = 0; l < arr_1.length; l++) {
                var dataTwo = arr_1[l];

                // 只判断name相同,则认为是相同的对象
                if (dataOne.name == dataTwo.name) {
                    sameArr.push(dataOne);
                }
            }
        }
    }
    console.log(sameArr);
</script>

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632