![](/img/trans.png)
[英]How to Filter an Array of Object and check if Specific key has a value in an Array
[英]How to select an object inside array that has a specific value in JS
如何在数组中选择一个对象,该对象的“ slug”键的值为“ A”?
例如,如果我有这个:
var allItems = [
{
"slug": "henk",
"company_founded": "2008",
"company_category": "Clean",
"company_logo": false,
"company_description": "",
}
{
"id": "bas",
"company_founded": "2012",
"company_category": "Health",
"company_logo": false,
"company_description": "",
}
{
"slug": "jan",
"company_founded": "2005",
"company_category": "Clean",
"company_logo": false,
"company_description": "",
}
]
我想要的是将包含slug的对象放入新变量中。
因此,我将可以使用以下方法:
var = SelectedItem = {
"slug": "henk",
"company_founded": "2012",
"company_category": "Health",
"company_logo": false,
"company_description": "",
}
谢谢!
您将不得不对列表进行迭代,并根据您的情况选择所需的元素:
var result;
for each (var item in allItems ) {
if(item.company_founded === "2012") {
result = item;
break;
}
}
您可以考虑将值存储在按预期键索引的对象中,例如:
var allItems = {
"henk":
{
"slug": henk,
"company_founded": "2008",
"company_category": "Clean",
"company_logo": false,
"company_description": "",
},
"bas":
{
"id": bas,
"company_founded": "2012",
"company_category": "Health",
"company_logo": false,
"company_description": "",
}
]
这使您可以检索类似于allItems.henk
的值
它索引速度更快,因为它是对数哈希表查找,而不是完整的迭代。
-----编辑----
如果您需要提前对其进行转换以加快查找速度,只要生成新结构的成本小于您将要执行的查找成本即可。 你可以做,
var allItemsByKey = {}
for(var i = 0, l = allItems.length; i<l; i++){
var item = allItems[i];
allItemsByKey[item.slug] = item;
}
那么allItemsByKey
具有上面演示的结构
您可能需要查看Array.prototype.find
:
var obj = allItems.find(function(el){
return el.slug === 'henk';
});
对于混合对象,可以遍历所有属性,仅返回某些属性具有特定值的对象。
var allItems = [{ "slug": "henk", "company_founded": "2008", "company_category": "Clean", "company_logo": false, "company_description": "", }, { "id": "bas", "company_founded": "2012", "company_category": "Health", "company_logo": false, "company_description": "", }, { "slug": "jan", "company_founded": "2005", "company_category": "Clean", "company_logo": false, "company_description": "", }], result = allItems.filter(function (a) { return Object.keys(a).some(function (k) { return a[k] === 'henk'; }); }); document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
使其一致:对象数组(使用逗号分隔,将id更改为Slug以匹配其他对象。)
假设该属性是唯一的,否则它将在列表中获得最后一个。 像ID查找之类的。
编辑以显示复杂对象与简单数组中的值EDIT2 :按类别添加第二次查找
var allItems = {"fred":"H fred",rats:"rats",lookupitems: [{
"slug": "henk",
"company_founded": "2008",
"company_category": "Clean",
"company_logo": false,
"company_description": "",
} ,{
"slug": "bas",
"company_founded": "2012",
"company_category": "Health",
"company_logo": false,
"company_description": "",
}, {
"slug": "jan",
"company_founded": "2005",
"company_category": "Clean",
"company_logo": false,
"company_description": "",
}]};
创建一个可重复使用的查询:
var lookup = {};
var lookupbycategory = {};
// create reference to list above and use it everywhere
lookup.list = allItems.lookupitems;
for (var i = 0, len = lookup.list.length; i < len; i++) {
lookup[lookup.list[i].slug] = lookup.list[i];
lookupbycategory[lookup.list[i].company_category] = lookup.list[i];
}
得到一个(使用它)
var mychoice = lookup["henk"];
alert(JSON.stringify(mychoice));
alert(JSON.stringify(lookupbycategory["Clean"]));
重用它
var mybas = lookup["bas"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.