我有一个数组
vendors = [{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
} // and so on...
];
我如何检查这个数组,看看“Magenic”是否存在?我不想循环,除非迫不得已。我可能要处理几千条记录。
我有一个数组
vendors = [{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
} // and so on...
];
我如何检查这个数组,看看“Magenic”是否存在?我不想循环,除非迫不得已。我可能要处理几千条记录。
当前回答
const a = [{one:2},{two:2},{two:4}]
const b = a.filter(val => "two" in val).length;
if (b) {
...
}
其他回答
根据ECMAScript 6规范,您可以使用findIndex。
const magenicIndex =供应商。findIndex(供应商=>供应商。= = = ' Magenic')名称;
magenicIndex将保留0(这是数组中的索引)或-1(如果没有找到)。
因为OP询问了密钥是否存在的问题。
使用ES6 reduce函数返回布尔值的更优雅的解决方案可以是
const magenicVendorExists = vendors.reduce((accumulator, vendor) => (accumulator||vendor.Name === "Magenic"), false);
注意:reduce的初始参数是false,如果数组有键,它将返回true。
希望它有助于更好和更清晰的代码实现
我宁愿用正则表达式。
如果您的代码如下所示,
vendors = [
{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
}
];
我推荐
/"Name":"Magenic"/.test(JSON.stringify(vendors))
除非你想这样重组:
vendors = {
Magenic: {
Name: 'Magenic',
ID: 'ABC'
},
Microsoft: {
Name: 'Microsoft',
ID: 'DEF'
} and so on...
};
你可以这样做如果(vendor . magnetic)
你必须循环
或者你可以这样做:
const find = (key, needle) => return !!~vendors.findIndex(v => (v[key] === needle));