在对象数组中查找对象将返回null

时间:2016-09-24 18:38:48

标签: javascript relayjs

我有一个对象数组,并使用indexOf查找该数组中的特定对象。

我已切换到在线数据存储区,因为所选对象的数据现在作为变量返回,我必须创建一个“虚拟”对象,然后用于查找数组中匹配的选定对象。

我比较了虚拟对象和数组中的对象,它们看起来完全相同,但总是会返回null。

这是对象数组:

object:

Creative {
    id: '5653294995210240',
    gid: '5653294995210240',
    name: 'Yo',
    description: '',
    url: '',
    videos: [] 
}

这是虚拟对象:

function cursorForObjectInConnection(data, object) {
  var offset = data.indexOf(object);
  if (offset === -1) {
    return null;
  }
  return offsetToCursor(offset);
}

以下是用于查找的功能。这是不可修改的,因为它是GraphQL和Relay的一部分,它是使用的函数。

nil

2 个答案:

答案 0 :(得分:1)

  

indexOf()使用严格相等(使用===或三等号运算符使用的相同方法)将searchElement与Array的元素进行比较。

来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

这是在Javascript中了解的一个非常重要的规则。您的虚拟对象(即使它看起来相同)与该数组中的对象不同。它们存在于计算机内存中的两个不同位置,因此indexOf使用的严格相等比较认为它们不等于

原始数据类型(如字符串,数字或布尔值)不会出现这种情况。

答案 1 :(得分:0)

为什么你不做自己的查找功能(按ID搜索)和搜索对象按ID?!!