注意:在您的问题中,
所以我有问题:
我得到了这样的数据源
{
"Class": "ScanLayers",
"ExportVersion": 1,
"Layers": {
"0150e77a-9af5-ccc1-aa82-89793c1c4067": {
"Class": "ScanTiles",
"ExportVersion": 3,
"MetadataUUID": "90a23cdc-9b2f-4788-935d-c539e59019c3",
"Scan": "0150e77a-9af5-4b77-aa82-89793c1c4067",
"ScanName": "ATT021"
},
"0150e77a-9af5-4b77-bb43-89793c1a4067": {
"Class": "ScanTiles",
"ExportVersion": 3,
"MetadataUUID": "90a23cdc-9b2f-4788-935d-c5sad876adc3",
"Scan": "0150e77a-9af5-4b77-bb43-89793c1a4067",
"ScanName": "ATT022"
}
}
}
我希望能够找到某个扫描名称,然后返回其父级。举个例子。我想找到"ATT022"
.我会得到一个 UUID 的返回 ID,"0150e77a-9af5-4b77-bb43-89793c1a4067"
我知道如果我有 UUID,这将很容易归还孩子。但我不明白如何找到孩子来回报父母。
使用本机 Array.prototype.find 从 Object.keys(或 null
(中获取所需条件的键,如下所示:
var obj = {
'Class': "ScanLayers",
'ExportVersion': 1,
'Layers': {
"0150e77a-9af5-ccc1-aa82-89793c1c4067": {
"Class": "ScanTiles",
"ExportVersion": 3,
"MetadataUUID": "90a23cdc-9b2f-4788-935d-c539e59019c3",
"Scan": "0150e77a-9af5-4b77-aa82-89793c1c4067",
"ScanName": "ATT021"
},
"0150e77a-9af5-4b77-bb43-89793c1a4067": {
"Class": "ScanTiles",
"ExportVersion": 3,
"MetadataUUID": "90a23cdc-9b2f-4788-935d-c5sad876adc3",
"Scan": "0150e77a-9af5-4b77-bb43-89793c1a4067",
"ScanName": "ATT022"
}
}
}
var scanName = "ATT022";
var found = Object.keys(obj.Layers).find(function(layerKey) {
return obj.Layers[layerKey].ScanName == scanName;
});
if (found)
console.log(found);
else
console.log("Nothing found!");
如果这正是您的数据架构,则可以使用这样的函数(使用 ES6 语法(:
var obj = {
"Class": "ScanLayers",
"ExportVersion": 1,
"Layers": {
"0150e77a-9af5-ccc1-aa82-89793c1c4067": {
"Class": "ScanTiles",
"ExportVersion": 3,
"MetadataUUID": "90a23cdc-9b2f-4788-935d-c539e59019c3",
"Scan": "0150e77a-9af5-4b77-aa82-89793c1c4067",
"ScanName": "ATT021"
},
"0150e77a-9af5-4b77-bb43-89793c1a4067": {
"Class": "ScanTiles",
"ExportVersion": 3,
"MetadataUUID": "90a23cdc-9b2f-4788-935d-c5sad876adc3",
"Scan": "0150e77a-9af5-4b77-bb43-89793c1a4067",
"ScanName": "ATT022"
}
}
}
const getIdByScanName = (obj, name) => {
for (id in obj['Layers']) {
if (obj['Layers'][id]['ScanName'] === name) return id
}
}
console.log(getIdByScanName(obj, "ATT021")) //0150e77a-9af5-ccc1-aa82-89793c1c4067
console.log(getIdByScanName(obj, "ATT022")) //0150e77a-9af5-4b77-bb43-89793c1a4067
console.log(getIdByScanName(obj, "ATT023")) //undefined (when key not found)
注意:在您的问题中,
Layers
子对象键之间缺少一个逗号(可能是拼写错误(。
我为您的问题创建了这个 jsbin。
你只需要将 3 个参数传递给这个函数,数据源、类型和字符串
checkName = function (obj,type,string) {
for( var key in obj.Layers){
if(obj.Layers[key][type] === string){
return obj.Layers[key];
}
}
}
console.log(checkName(dataSource,'ScanName','ATT022'))
它会返回这样的东西...
{
Class: "ScanTiles",
ExportVersion: 3,
MetadataUUID: "90a23cdc-9b2f-4788-935d-c5sad876adc3",
Scan: "0150e77a-9af5-4b77-bb43-89793c1a4067",
ScanName: "ATT022"
}