Javascript 检查来自不同数组的两个元素的一个属性是否相等?
目前,我一直在使用嵌套for循环来解决此问题:Javascript 检查来自不同数组的两个元素的一个属性是否相等?,javascript,arrays,Javascript,Arrays,目前,我一直在使用嵌套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.pr
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..);
}
}
}
for(var i=0;i
然而,我认为可能有一个样板函数已经做到了这一点。做了几次搜索,但什么也没有出现——有任何指针,或者这是我目前最好的吗
编辑:简要说明,跟踪的玩家都来自玩家的数据。通过检查(通常)较大的玩家数据中的每个玩家是否在TrackedPlayer中,我知道是否将它们列为“添加”到HTML选择字段的选项 lodash库具有完全满足您需要的功能。使用此选项,您可以将代码更改为:
_.intersectionBy([PHP_VARS.players_data, this.props.trackedPlayers], "_id")
.forEach(element=> {
data.push(/* ... */)
})
或者,对循环的…使用:
const intersection = _.intersectionBy([PHP_VARS.players_data, this.props.trackedPlayers], "_id")
for (element of intersection) {
data.push(/* ... */)
}
您可以使用一个对象作为哈希表,并在两个数组上进行迭代,第一个用于构建哈希表,第二个用于测试和进一步的操作
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..*/);
}
});
您应该澄清什么是“两个数组中的内容”。它是否需要i
和j
索引?只有通用的\u id
?\u id
是字符串吗?可以重复吗?另请参见@Dezachu,如果您添加this.props.trackedPlayers
和PHP\u VARS.players\u数据
contents@Oriol“来自两个数组的东西”是一堆与这个问题无关的通用术语。重要的部分(至少对我来说)是,我必须为第一个数组中的每个元素遍历整个第二个数组。这是一个相对重要的实现(数组越大,越重),因此我们只是在寻找更好的方法。除了知道TrackedPlayer与Player数据中的X字段相同之外,结构的内容并不重要。您如何知道“两个数组中的内容”不需要i
和j
索引?问题还不清楚。第一个元素的引用在对象中,第二个元素是实际元素a
@NinaScholz我不知道是否有否决票,但最好明确地说TrackedPlayer
中的对象可以在对象[a.\u id]上找到
而players\u data
中的对象可以在a
下找到,我没有否决投票。如果问题更清楚的话,我会回答这样的问题。@Gothdo,你说的代码对我来说更简单是什么意思?在复杂情况下,这个解决方案提供O(n+m)而不是O(n*m)的OP复杂度。随着数组变大,您的普通JavaScript解决方案将变得更慢,可能考虑使用哈希(对象),我没有投票,但是请解释您发布的代码段所能运行的浏览器。使用Babel,此代码将在所有浏览器中运行。顺便说一句:OP甚至没有提到这段代码应该在浏览器中运行。添加babel作为小型项目的依赖项可能不是一个好主意。@andlrc作为开发人员的依赖项,为什么不呢?