为了账号安全,请及时绑定邮箱和手机立即绑定

如何确定Javascript数组是否包含一个属性等于给定值的对象?

如何确定Javascript数组是否包含一个属性等于给定值的对象?

慕神8447489 2019-11-15 15:10:43
如何确定Javascript数组是否包含一个属性等于给定值的对象?我有一个数组vendors = [     {       Name: 'Magenic',       ID: 'ABC'      },     {       Name: 'Microsoft',       ID: 'DEF'     } //and so on goes array... ];如何检查这个数组以确定Magenic是否存在?我不想循环,除非我必须这样做。我可能有几千张唱片。更新由于这是一个很受欢迎的帖子,我想我应该分享一些我发现的新东西。看来@CAFxX已经分享了这一点!我应该多读些这些。我偶然发现https:/benfrain.com/谅解-原生-javascript-数组-方法/.vendors.filter(function(vendor){ return vendor.Name === "Magenic" });对于ECMAScript 2015,使用新的箭头函数甚至更简单:vendors.filter(vendor => (vendor.Name === "Magenic"));
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

没有“魔术”的方法来检查数组中没有循环的东西。即使您使用某些函数,该函数本身也将使用一个循环。你能做的是,一旦你找到你想要的东西来减少计算时间,就从循环中挣脱出来。

var found = false;for(var i = 0; i < vendors.length; i++) {
    if (vendors[i].Name == 'Magenic') {
        found = true;
        break;
    }}



查看完整回答
反对 回复 2019-11-16
?
FFIVE

TA贡献1797条经验 获得超6个赞

不需要重新发明车轮循环,至少不显式(使用箭头函数只适用于现代浏览器):

if (vendors.filter(e => e.Name === 'Magenic').length > 0) {
  /* vendors contains the element we're looking for */}

或,更好:

if (vendors.some(e => e.Name === 'Magenic')) {
  /* vendors contains the element we're looking for */}

编辑:如果你需要与糟糕的浏览器兼容,那么你最好的选择是:

if (vendors.filter(function(e) { return e.Name === 'Magenic'; }).length > 0) {
  /* vendors contains the element we're looking for */}



查看完整回答
反对 回复 2019-11-16
?
慕容森

TA贡献1853条经验 获得超18个赞

不需要循环。出现在脑海中的三种方法:

Array.Prototype.

这是你的问题最准确的答案,即“检查是否存在某物”,这意味着一个错误的结果。如果有“Magenic”对象,则为真,否则为假:

let hasMagenicVendor = vendors.some( vendor => vendor['Name'] === 'Magenic' )

Array.Prototype.filter()

这将返回所有“Magenic”对象的数组,即使只有一个(将返回一个元素数组):

let magenicVendors = vendors.filter( vendor => vendor['Name'] === 'Magenic' )

如果你试图强迫这个布尔值,它将不能工作,因为一个空数组(没有‘Magenic’对象)仍然是真实的。所以就用magenicVendors.length在你的条件下。

Array.Prototype.find()

这将返回第一个“Magenic”对象(或undefined如果没有):

let magenicVendor = vendors.find( vendor => vendor['Name'] === 'Magenic' );

这会胁迫到布尔OK(任何物体都是真实的,undefined是虚假的)。


注意:我使用的是供应商[“名称”],而不是供应商名称,因为属性名称的大小写很奇怪。

注2:在检查名称时,没有理由使用松散相等(=)而不是严格相等(=)。



查看完整回答
反对 回复 2019-11-16
  • 3 回答
  • 0 关注
  • 394 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信