我有一些代码会返回我点击的subcat的名称。
以下是以下数据:
theData = {
"categories": [
{
"id": "661",
"name": "some name",
"description": "some description",
"subcat": [
{
"id": "662",
"name": "sub 1",
"translations": null
},
{
"id": "663",
"name": "sub 2",
"translations": null
}
],
"image": null
},
{
"id": "657",
"name": "some other name",
"description": "",
"subcat": [
{
"id": "456",
"name": "sub 12",
"translations": null
},
{
"id": "656",
"name": "sub 15",
"translations": null
}
],
"image": null
}
]
};
我需要一些方法来查找subcat名称的父ID。
例如,如果我给它“sub 15”,它将返回“661”,这是父id
我该怎么做?
答案 0 :(得分:2)
默认情况下,没有办法访问"父母" Javascript中的一个对象 - 它可以在任何数量的其他对象中引用,甚至可以在其自身中引用,因此无法确定对象的唯一父对象是什么。
相反,我们只是遍历所有数据,直到找到匹配的ID,如果我们找不到它,则返回null
。此解决方案依赖于您的ID是唯一的实体,因此如果不是这种情况,则必须更改它。话虽如此,这是一个例子:
function getParent(subID) {
for (var i in theData.categories) {
var parent = theData.categories[i];
if ('subcat' in parent && 'length' in parent.subcat) {
for (var j = 0; j < parent.subcat.length; j++) {
if (parent.subcat[j].id === subID) {
return parent.id;
}
}
}
}
return null;
}
如果您不希望函数返回null,则可以随时更改它以使其返回-1
,假设-1
为您的ID带外。另请注意,这不是最佳解决方案,因此,如果您打算将其用于大量数据,那么您将需要研究更快速和/或更高效的搜索算法。
答案 1 :(得分:1)
试试这个。我们必须遍历所有数据
[fiddle][1]
var input = "sub 15";
var id =-1;
for(var i=0;i<theData.categories.length;i++){
if(theData.categories[i].subcat!=null){
for(var j=0;j<theData.categories[i].subcat.length;j++){
if(theData.categories[i].subcat[j].name==input){
id= theData.categories[i].id;
break;
}
}
}
}
console.log(id)
答案 2 :(得分:0)
您可能会考虑更多通用解决方案,它会搜索subcat
数组中的给定键和值。然后只取第一个对象的id
。
function getParentId(key, value) {
return (theData.categories.filter(function (a) {
return a.subcat.some(function (b) {
return b[key] === value;
});
})[0] || {}).id;
}
var theData = { categories: [{ id: 661, name: "some name", description: "some description", subcat: [{ id: 662, name: "sub 1", translations: null }, { id: 663, name: "sub 2", translations: null }], image: null }, { id: 657, name: "some other name", description: 0, subcat: [{ id: 456, name: "sub 12", translations: null }, { id: 656, name: "sub 15", translations: null }], image: null }] };
console.log(getParentId('name', 'sub 15'));
答案 3 :(得分:0)
这可能不是最好的方法,但希望这会有用
var getSubCat = []; // create an empty array to map parent id with sub name
var getCat = theData.categories; // get categories
getCat.forEach(function(item) { // loop through categories
item.subcat.forEach(function(elem) {
getSubCat.push({
id: item.id, // this is parent id
sub: elem.name // name inside each subcat object. Total 4 subcat object
});
})
})
var parentId = getSubCat.filter(function(elem){ // filter the getSubCat array
return elem.sub ==='sub 15'
})[0].id // parentId is an array, we need first object so [0]
alert(parentId)
现在我在每个subcat
对象中推送名称。根据要求,您也可以推送他们的身份
答案 4 :(得分:0)
以下解决方案与furkle的解决方案类似。但是在这里它使用jquery来遍历json对象。
function getParent(subID) {
var parentId = null;
$.each(theData.categories, function(i, v)
{
$.each(v.subcat, function(idx, obj){
if(obj.name ==subID)
parentId = v.id
})
})
return parentId;
}