我有一个数组
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 check = vendors.find((item)=>item.Name==='Magenic')
console.log(check)
试试这段代码。
如果项目或元素存在,则输出将显示该元素。如果它不存在,那么输出将是“未定义的”。
其他回答
如果我错了请指正。 我可以像这样使用每种方法,
var found=false;
vendors.forEach(function(item){
if(item.name === "name"){
found=true;
}
});
现在我已经习惯了,因为它简单明了。 谢谢你!
2021解决方案*
Lodash .some (docs)是一个干净的解决方案,如果你使用_matchesProperty (docs)速记:
_.some(VENDORS, ['Name', 'Magenic'])
解释
这将遍历供应商数组,寻找Name键值为字符串'Magenic'的元素对象。一旦找到这个元素,它就返回true并停止迭代。如果在遍历整个数组后仍未找到该元素,则返回false。
代码片段
const vendor =[{名称:'Magenic', ID: 'ABC'},{名称:'Microsoft', ID: 'DEF'}]; console.log(_。some(vendor, ['Name', 'Magenic']));/ /正确的 < script src = " https://cdn.jsdelivr.net/npm/lodash@4.17.20 lodash.min.js " > < /脚本>
*注意,这使用流行的lodash库来实现最简单/最短的解决方案。对于那些感兴趣的人,我提供这个作为现有香草JS解决方案的替代方案。
如果你正在使用jquery,你可以利用grep来创建所有匹配对象的数组:
var results = $.grep(vendors, function (e) {
return e.Name == "Magenic";
});
然后使用结果数组:
for (var i=0, l=results.length; i<l; i++) {
console.log(results[i].ID);
}
我解决这个问题的方法是使用ES6并创建一个函数来为我们检查。这个函数的好处是,它可以在整个项目中重复使用,以检查给定键和值的任何对象数组。
说得够多了,让我们看看代码
数组
const ceos = [
{
name: "Jeff Bezos",
company: "Amazon"
},
{
name: "Mark Zuckerberg",
company: "Facebook"
},
{
name: "Tim Cook",
company: "Apple"
}
];
函数
const arrayIncludesInObj = (arr, key, valueToCheck) => {
return arr.some(value => value[key] === valueToCheck);
}
电话/使用
const found = arrayIncludesInObj(ceos, "name", "Tim Cook"); // true
const found = arrayIncludesInObj(ceos, "name", "Tim Bezos"); // false
除非你想这样重组:
vendors = {
Magenic: {
Name: 'Magenic',
ID: 'ABC'
},
Microsoft: {
Name: 'Microsoft',
ID: 'DEF'
} and so on...
};
你可以这样做如果(vendor . magnetic)
你必须循环