我有一个数组
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”是否存在?我不想循环,除非迫不得已。我可能要处理几千条记录。
当前回答
你可以使用lodash。如果lodash库对你的应用程序来说太沉重,可以考虑将不需要的不使用的函数分块。
let newArray = filter(_this.props.ArrayOne, function(item) {
return find(_this.props.ArrayTwo, {"speciesId": item.speciesId});
});
这只是一种方法。另一个可以是:
var newArray= [];
_.filter(ArrayOne, function(item) {
return AllSpecies.forEach(function(cItem){
if (cItem.speciesId == item.speciesId){
newArray.push(item);
}
})
});
console.log (arr);
上面的例子也可以在不使用任何库的情况下重写,比如:
var newArray= [];
ArrayOne.filter(function(item) {
return ArrayTwo.forEach(function(cItem){
if (cItem.speciesId == item.speciesId){
newArray.push(item);
}
})
});
console.log(arr);
希望我的回答能有所帮助。
其他回答
你不能不看物体本身。
你也许应该稍微改变一下你的结构,比如
vendors = {
Magenic: 'ABC',
Microsoft: 'DEF'
};
然后你就可以像使用查找哈希一样使用它。
vendors['Microsoft']; // 'DEF'
vendors['Apple']; // undefined
如果我错了请指正。 我可以像这样使用每种方法,
var found=false;
vendors.forEach(function(item){
if(item.name === "name"){
found=true;
}
});
现在我已经习惯了,因为它简单明了。 谢谢你!
这里的许多答案都很好,也很简单。但如果你的对象数组有一个固定的值集,那么你可以使用下面的技巧:
映射一个对象中的所有名称。
vendors = [
{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
}
];
var dirtyObj = {}
for(var count=0;count<vendors.length;count++){
dirtyObj[vendors[count].Name] = true //or assign which gives you true.
}
现在这个dirtyObj你可以一次又一次地使用,没有任何循环。
if(dirtyObj[vendor.Name]){
console.log("Hey! I am available.");
}
我解决这个问题的方法是使用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
如果你正在使用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);
}