Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查来自不同数组的两个元素的一个属性是否相等?_Javascript_Arrays - Fatal编程技术网

Javascript 检查来自不同数组的两个元素的一个属性是否相等?

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循环来解决此问题:

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作为开发人员的依赖项,为什么不呢?