Javascript 将对象数组与ID数组进行比较
使用jQuery,我想使用一个Id数组来查找Javascript 将对象数组与ID数组进行比较,javascript,jquery,arrays,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
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查询来获得答案,但无法找到答案。您不需要jQuery。您可以使用筛选
allObjects
,并检查对象Id
属性是否在arrayOfIds
中:
allObjects.filter(x=> arrayOfIds.includes(Number(x.Id)))
请参阅。此操作不需要jQuery。您可以使用筛选
allObjects
,并检查对象Id
属性是否在arrayOfIds
中:
allObjects.filter(x=> arrayOfIds.includes(Number(x.Id)))
请参阅。最好的方法是将数组转换为对象本身:
function atoo(a)
{
var i, obj;
obj = {};
for (i = 0; i < a.length; i++)
{
obj[a[i].Id] = a[i];
}
return obj;
}
返回也存储在数组中a[3]
下的正确对象
不涉及jQuery,它应该被视为一个特性,因为它是所有这些问题的通用解决方案
使用筛选器(如在
Array.prototype.filter()
中)更容易编写,但当您经常访问项目或数组非常大时,也会导致性能问题。上述解决方案依赖于对象引用的内部实现,其速度与您希望的一样快。最好是将数组转换为对象本身:
function atoo(a)
{
var i, obj;
obj = {};
for (i = 0; i < a.length; i++)
{
obj[a[i].Id] = a[i];
}
return obj;
}
返回也存储在数组中a[3]
下的正确对象
不涉及jQuery,它应该被视为一个特性,因为它是所有这些问题的通用解决方案
使用筛选器(如在Array.prototype.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();
您可以像下面这样使用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();
不要使用
+
运算符将字符串转换为数字,这会使代码无法读取。还有,当存在.includes()
方法时,为什么要使用.indexOf()
呢?最好不要使用+,但我没有发现indexOf()有任何问题@GothDono不要使用+
运算符将字符串转换为数字,这会使代码无法读取。还有,当存在.includes()
方法时,为什么要使用.indexOf()
呢?最好不要使用+,但我没有发现indexOf()有任何问题@根据MDN,IE中还不支持includes,如果这是一个问题。@Taplar有一个polyfill用于它。根据MDN,IE中还不支持includes,如果这是一个问题。@Taplar有一个polyfill用于它。