将对象数组与id数组进行比较

时间:2016-05-06 13:39:49

标签: javascript jquery arrays

使用jQuery,我想使用一组id来查找allObjects数组中具有匹配Id值的对象。

var arrayOfIds = [1, 4, 5];

var allObjects = [{"Id":"1", "name":"aa"},{"Id":"2", "name":"bb"} ,{"Id":"3", "name":"cc"} ,{"Id":"4", "name":"dd"}, {"Id":"5", "name":"ee"}, {"Id":"6", "name":"ff"}, {"Id":"7", "name":"gg"}, {"Id":"8", "name":"hh"}, {"Id":"9", "name":"ii"}];

结果相等:

[{"Id":"1", "name":"aa"}, {"Id":"4", "name":"dd"}, {"Id":"5", "name":"ee"}]

到目前为止,我只能使用以下内容来提取单个对象:

var result = $.grep(arrayOfIds, function(e) { return e.Id == 3; });

我觉得答案可能是通过以某种方式修改上述$ .grep查询来实现的,但无法弄明白。

3 个答案:

答案 0 :(得分:3)

你不需要jQuery。您可以使用Array.prototype.filter()过滤allObjectsArray.prototype.includes()来检查对象Id属性是否在arrayOfIds中:

allObjects.filter(x=> arrayOfIds.includes(Number(x.Id)))

请参阅demo on JS Bin

答案 1 :(得分:0)

最好是将数组转换为对象本身:

public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler
{
   public void OnPointerClick(PointerEventData eventData)
   {
      Debug.Log("Clicked");
   }

   public void OnPointerDown(PointerEventData eventData)
   {
      Debug.Log("Down");
   }

}

现在,您可以通过简单地将它们作为索引进行处理来访问数组中的所有项目:

function atoo(a)
{
  var i, obj;

  obj = {};

  for (i = 0; i < a.length; i++)
  {
    obj[a[i].Id] = a[i];
  }

  return obj;
}

返回正确的对象,该对象也存储在obj["4"] 下的数组中。

没有涉及jQuery应该被视为一个功能,因为它是解决所有这些问题的通用解决方案。

使用过滤器(如a[3]中)更容易编写,但是当您经常访问项目或数组非常大时,也会导致性能问题。上述解决方案依赖于对象引用的内部实现,其速度与您希望的一样快。

答案 2 :(得分:0)

您可以使用以下filter()方法。

var arrayOfIds = [1, 4, 5];
var allObjects = [{ "Id": "1", "name": "aa" }, { "Id": "2", "name": "bb" }, { "Id": "3", "name": "cc" }, { "Id": "4", "name": "dd" }, { "Id": "5", "name": "ee" }, { "Id": "6", "name": "ff" }, { "Id": "7", "name": "gg" }, { "Id": "8", "name": "hh" }, { "Id": "9", "name": "ii" }];
var result = $(allObjects).filter(function() { return arrayOfIds.indexOf(+this.Id) > -1 }).get();