跳转至

判断数据是否在某个数据对象中

js判断isArr数据是否在edges的parentId中,如果有一个在就就返回false,没有就返回true

const isArr = ["ff33002340944c1c8d6bc8f71edc07e4", "1","2"]
const edges = [
    {
        "parentId": "ff33002340944c1c8d6bc8f71edc07e4",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791366
    },
    {
        "parentId": "af0f2910299b4290bb8cb06722023919",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791440
    },
    {
        "parentId": "1d819da622834e4395817324f122565d",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791599
    },
    {
        "parentId": "048ed0031e0942d4a941c667116ad2ef",
        "childId": "1d819da622834e4395817324f122565d",
        "sortTime": 1705303791680
    },
    {
        "parentId": "048ed0031e0942d4a941c667116ad2ef",
        "childId": "ff33002340944c1c8d6bc8f71edc07e4",
        "sortTime": 1705303791750
    }
]

方案1

要判断isArr数组中的任何一个元素是否存在于edges数组中某个对象的parentId属性,我们可以使用数组的some()方法。如果isArr中有任何一个元素作为parentId出现在edges中,那么就返回false;如果没有任何一个元素出现,就返回true。以下是实现这一逻辑的JavaScript代码:

const isArr = ["ff33002340944c1c8d6bc8f71edc07e4", "1", "2"];
const edges = [
    {
        "parentId": "ff33002340944c1c8d6bc8f71edc07e4",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791366
    },
    {
        "parentId": "af0f2910299b4290bb8cb06722023919",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791440
    },
    {
        "parentId": "1d819da622834e4395817324f122565d",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791599
    },
    {
        "parentId": "048ed0031e0942d4a941c667116ad2ef",
        "childId": "1d819da622834e4395817324f122565d",
        "sortTime": 1705303791680
    },
    {
        "parentId": "048ed0031e0942d4a941c667116ad2ef",
        "childId": "ff33002340944c1c8d6bc8f71edc07e4",
        "sortTime": 1705303791750
    }
];

const isNotInEdges = !isArr.some(id => edges.some(edge => edge.parentId === id));

console.log(isNotInEdges); // 返回:false 或者 true

在这段代码中,我们首先对isArr执行some()方法,检查其中的每个id是否作为parentId存在于edges数组的任何对象中。如果some()方法找到了这样的情况,它会立即返回true,表示isArr中至少有一个元素出现在了edges中的parentId属性。由于我们想要的是相反的结果(如果有一个在就返回false),所以我们在外层使用了逻辑非操作符!来反转这个结果。因此,如果isArr中的任何一个元素都不存在于edges中的parentId属性,isNotInEdges将为true

方案2

为了判断isArr数组中的元素是否全部不在edges数组的parentId字段中,我们可以使用数组的every()方法。这个方法会检查数组中的所有元素是否都符合提供的测试函数。如果所有元素都通过测试,它返回true;如果有任何一个元素未通过测试,它返回false

我们可以组合every()some()方法来实现这一逻辑:对isArr使用every()方法,确保其内的每个元素都不在edgesparentId中,然后使用some()方法来测试每个元素是否出现在edges中。

以下是实现这一逻辑的JavaScript代码:

const isArr = ["ff33002340944c1c8d6bc8f71edc07e4", "1", "2"];
const edges = [
    {
        "parentId": "ff33002340944c1c8d6bc8f71edc07e4",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791366
    },
    {
        "parentId": "af0f2910299b4290bb8cb06722023919",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791440
    },
    {
        "parentId": "1d819da622834e4395817324f122565d",
        "childId": "8f8d3b4e3fb9442d8d9e4fe608bb2fe9",
        "sortTime": 1705303791599
    },
    {
        "parentId": "048ed0031e0942d4a941c667116ad2ef",
        "childId": "1d819da622834e4395817324f122565d",
        "sortTime": 1705303791680
    },
    {
        "parentId": "048ed0031e0942d4a941c667116ad2ef",
        "childId": "ff33002340944c1c8d6bc8f71edc07e4",
        "sortTime": 1705303791750
    }
];

const areNotInEdges = isArr.every(id => !edges.some(edge => edge.parentId === id));

console.log(areNotInEdges); // 返回:true 或者 false

在这段代码中,every()方法会对isArr中的每个id执行测试函数:如果id不在edges的任何一个parentId中,测试函数会返回true;如果id找到了匹配的parentIdsome()方法会返回true,测试函数随之返回false。只要isArr中有一个元素出现在了edges中的parentId属性,areNotInEdges就会为false;否则,如果全部不在,areNotInEdgestrue。 ```