目前我一直在使用嵌套for循环来解决这个问题:
for (var i = 0; i < this.props.trackedPlayers.length; i++)
{
for (var j = 0; j < PHP_VARS.players_data.length; j++)
{
// This check here is the key part
if (PHP_VARS.players_data[j]._id == this.props.trackedPlayers[i]._id)
{
data.push(// stuff from both arrays..);
}
}
}
但是我想可能有一个样板函数已经这样做了。做了几次搜索但没有任何问题 - 任何指针,或者这是我现在最好的搜索?
编辑:简要说明,trackedPlayers全部来自players_data。通过检查(通常)较大的players_data中的每个玩家是否在trackedPlayers中,我知道是否将它们列为“添加”到HTML选择字段的选项。
答案 0 :(得分:1)
您可以将对象用作哈希表并迭代两个数组,首先用于构建哈希表,第二个用于测试和进一步操作。
var object = Object.create(null);
this.props.trackedPlayers.forEach(function (a) {
object[a._id] = a;
});
PHP_VARS.players_data.forEach(function (a) {
if (object[a._id]) {
// access data from this.props.trackedPlayers
// with object[a._id]._id as example
// access data from PHP_VARS.players_data
// with a._id as example
data.push(/* stuff from both arrays..*/);
}
});
答案 1 :(得分:0)
lodash库具有_.intersectionBy()
功能,可以完全满足您的需求。使用此功能,您可以将代码更改为:
_.intersectionBy([PHP_VARS.players_data, this.props.trackedPlayers], "_id")
.forEach(element=> {
data.push(/* ... */)
})
或使用for...of
循环:
const intersection = _.intersectionBy([PHP_VARS.players_data, this.props.trackedPlayers], "_id")
for (element of intersection) {
data.push(/* ... */)
}