检查 ID 是否在 ES6 中找到另一个数组
Check if ID Is Found Another Array in ES6
我想过滤掉数据。我想检查 data1
上的数据是否在 data2
上找到,并检查它是否有错误消息。请在下面检查我的代码。有更好的方法吗?
data1
[
{
"ids": "0111",
},
{
"ids": "0222",
},
{
"ids": "0333",
}
]
data2
[
{
"id": "0111",
"errorMessages": [
{
"message": ["sample error message 1"]
}
]
},
{
"id": "0333",
"errorMessages": []
}
]
代码
const output= data1.filter(
(element) => element.ids === data2.find((data) => data).id
);
console.log("output", output);
.find((data) => data)
没有做任何有用的事情 - 数组中的每个项目都是一个对象,这是真实的,所以它总是 return 数组中的第一个元素。
如果您 did 想要 .find
另一个数组中的匹配元素 - 那么更好的方法是制作一组在另一个数组中找到的 ID数组优先(设置查找比 .find
快得多 - O(1)
,即 O(n)
)。
您还需要实现检查 errorMessages
是否为空的逻辑。
const data1 = [
{
"ids": "0111",
},
{
"ids": "0222",
},
{
"ids": "0333",
}
]
const data2 = [
{
"id": "0111",
"errorMessages": [
{
"message": ["sample error message 1"]
}
]
},
{
"id": "0333",
"errorMessages": []
}
]
const ids = new Set(
data2
.filter(item => item?.errorMessages.length)
.map(item => item.id)
);
const output= data1.filter(
element => ids.has(element.ids)
);
console.log("output", output);
没有设置,但使用对象作为地图。
const IDKeys = {};
data2.forEach(data => {
if (data.errorMessages.length){
IDKeys[data.id] = true; // means valid
}
})
const filteredArray = data1.filter(data => IDKeys[data.id]);
这只会是 O(n),因为访问对象上的键是 O(1)
我想过滤掉数据。我想检查 data1
上的数据是否在 data2
上找到,并检查它是否有错误消息。请在下面检查我的代码。有更好的方法吗?
data1
[
{
"ids": "0111",
},
{
"ids": "0222",
},
{
"ids": "0333",
}
]
data2
[
{
"id": "0111",
"errorMessages": [
{
"message": ["sample error message 1"]
}
]
},
{
"id": "0333",
"errorMessages": []
}
]
代码
const output= data1.filter(
(element) => element.ids === data2.find((data) => data).id
);
console.log("output", output);
.find((data) => data)
没有做任何有用的事情 - 数组中的每个项目都是一个对象,这是真实的,所以它总是 return 数组中的第一个元素。
如果您 did 想要 .find
另一个数组中的匹配元素 - 那么更好的方法是制作一组在另一个数组中找到的 ID数组优先(设置查找比 .find
快得多 - O(1)
,即 O(n)
)。
您还需要实现检查 errorMessages
是否为空的逻辑。
const data1 = [
{
"ids": "0111",
},
{
"ids": "0222",
},
{
"ids": "0333",
}
]
const data2 = [
{
"id": "0111",
"errorMessages": [
{
"message": ["sample error message 1"]
}
]
},
{
"id": "0333",
"errorMessages": []
}
]
const ids = new Set(
data2
.filter(item => item?.errorMessages.length)
.map(item => item.id)
);
const output= data1.filter(
element => ids.has(element.ids)
);
console.log("output", output);
没有设置,但使用对象作为地图。
const IDKeys = {};
data2.forEach(data => {
if (data.errorMessages.length){
IDKeys[data.id] = true; // means valid
}
})
const filteredArray = data1.filter(data => IDKeys[data.id]);
这只会是 O(n),因为访问对象上的键是 O(1)