判断数据是否在某个数据对象中
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()
方法,确保其内的每个元素都不在edges
的parentId
中,然后使用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
找到了匹配的parentId
,some()
方法会返回true
,测试函数随之返回false
。只要isArr
中有一个元素出现在了edges
中的parentId
属性,areNotInEdges
就会为false
;否则,如果全部不在,areNotInEdges
为true
。
```