Javascript JS函数遍历对象并仅打印特定键的值,返回未定义的值
这是我的输入对象,我想通读它并查找以下“类别”:“映射”,然后创建一个数组,如下所示Javascript JS函数遍历对象并仅打印特定键的值,返回未定义的值,javascript,object,Javascript,Object,这是我的输入对象,我想通读它并查找以下“类别”:“映射”,然后创建一个数组,如下所示 { "class": "go.GraphLinksModel", "nodeDataArray": [ {"isGroup":true, "key":-1, "text":"SP", "xy":"-5 269.225"}, {"isGroup":true, "key":-2, "text":"DM", "xy":"300 243.26562500000003"}, {"ke
{ "class": "go.GraphLinksModel",
"nodeDataArray": [
{"isGroup":true, "key":-1, "text":"SP", "xy":"-5 269.225"},
{"isGroup":true, "key":-2, "text":"DM", "xy":"300 243.26562500000003"},
{"key":100, "Data":"device", "group":-2},
{"key":101, "Data":"name : Device1", "group":-2},
{"key":102, "Data":"config", "group":-2},
{"key":103, "Data":"interface", "group":-2},
{"key":104, "Data":"Loopback", "group":-2},
{"key":105, "Data":"name : {loopback-intf}", "group":-2},
{"key":106, "Data":"description", "group":-2},
{"key":107, "Data":"_tags : merge", "group":-2},
{"key":108, "Data":"__text : Loopback{loopback-intf}", "group":-2},
{"key":109, "Data":"ip", "group":-2},
{"key":110, "Data":"address", "group":-2},
{"key":111, "Data":"primary", "group":-2},
{"key":112, "Data":"address : {ip-address}", "group":-2},
{"key":113, "Data":"mask : 255.255.255.255", "group":-2},
{"key":114, "Data":"_xmlns : http://someweb.org", "group":-2},
{"key":115, "Data":"_tags : merge", "group":-2},
{"key":116, "Data":"Loopback", "group":-2},
{"key":117, "Data":"name : {loopback-intf}", "group":-2},
{"key":118, "Data":"description", "group":-2},
{"key":119, "Data":"_tags : merge", "group":-2},
{"key":120, "Data":"__text : Loopback{loopback-intf}", "group":-2},
{"key":121, "Data":"ip", "group":-2},
{"key":122, "Data":"address", "group":-2},
{"key":123, "Data":"primary", "group":-2},
{"key":124, "Data":"address : {ip-address}", "group":-2},
{"key":125, "Data":"mask : 255.255.255.255", "group":-2},
{"key":126, "Data":"_xmlns : http://sometest.org", "group":-2},
{"key":127, "Data":"_tags : merge", "group":-2},
{"key":0, "Data":"container car", "group":-1},
{"key":1, "Data":"container v8_engine", "group":-1},
{"key":2, "Data":"leaf-list cylinder-arrangement", "group":-1},
{"key":3, "Data":"type string", "group":-1},
{"key":4, "Data":"max-elements 8", "group":-1},
{"key":5, "Data":"container other-parts", "group":-1},
{"key":6, "Data":"list per-cylinder-parts", "group":-1},
{"key":7, "Data":"leaf piston-diameter", "group":-1},
{"key":8, "Data":"type uint32", "group":-1},
{"key":9, "Data":"range 2000... 9000", "group":-1},
{"key":10, "Data":"container valves", "group":-1},
{"key":11, "Data":"leaf number", "group":-1},
{"key":12, "Data":"list position", "group":-1},
{"key":13, "Data":"type change", "group":-1}
],
"linkDataArray": [
{"from":100, "to":101},
{"from":100, "to":102},
{"from":102, "to":103},
{"from":103, "to":104},
{"from":104, "to":105},
{"from":104, "to":106},
{"from":106, "to":107},
{"from":106, "to":108},
{"from":104, "to":109},
{"from":109, "to":110},
{"from":110, "to":111},
{"from":111, "to":112},
{"from":111, "to":113},
{"from":103, "to":114},
{"from":103, "to":115},
{"from":103, "to":116},
{"from":116, "to":117},
{"from":116, "to":118},
{"from":118, "to":119},
{"from":118, "to":120},
{"from":116, "to":121},
{"from":121, "to":122},
{"from":122, "to":123},
{"from":123, "to":124},
{"from":123, "to":125},
{"from":103, "to":126},
{"from":103, "to":127},
{"from":0, "to":1},
{"from":1, "to":2},
{"from":2, "to":3},
{"from":2, "to":4},
{"from":0, "to":5},
{"from":5, "to":6},
{"from":6, "to":7},
{"from":7, "to":8},
{"from":7, "to":9},
{"from":6, "to":10},
{"from":10, "to":11},
{"from":10, "to":12},
{"from":5, "to":13},
{"category":"Mapping", "from":4, "to":116},
{"category":"Mapping", "from":6, "to":104},
{"category":"Mapping", "from":9, "to":116},
{"category":"Mapping", "from":12, "to":109}
]}
但即使是简单的代码
category:[{a:4,b:116},{a:6,b:104},{a:9,b:116},{a:12,b:109}]
将输出设为未定义
注意:如果我像var data=that对象那样传递硬编码的数据,它工作得很好,但是我动态分配它的数组和尝试访问元素的数组是一样的,我会得到unassigned。不确定是什么原因造成的:(
我还尝试了以下方法
console.log(data.linkData.Array);
然后访问数据,但运气不佳这将访问筛选和映射以获得所需结果:
var data = JSON.parse(JSON.stringify(savedDiagramModel));
如果要在纯Javascript中执行此操作:
var result = data.linkDataArray.filter(function(item) {
return item.category;
}).map(function(item) {
return {a: item.from, b: item.to};
});
/*
[{
a: 4,
b: 116
}, {
a: 6,
b: 104
}, {
a: 9,
b: 116
}, {
a: 12,
b: 109
}]
*/
var类别=[];
对于(var i=0;i
问题在于动态数据
因此,在解析对象之前,我必须添加以下行
var category = [];
for (var i=0; i < data.linkDataArray.length; i++) {
var o = data.linkDataArray[i];
if (typeof(o.category) !== 'undefined') category.push({ a:o.from, b:o.to });
}
然后添加一个函数,通过linkDataArray进行解析,然后根据需要创建一个对象。您可能应该发布用于迭代该对象的JS代码。这里的想法是显示您尝试过但不起作用的代码,而不是让我们从scratchIs
category
为您编写所有这些代码数据
对象?它是否应该替换数据.linkDataArray
中的所有其他{“category”:“Mapping”、
..}
对象?据我所知,您只需要这些{“category”:“Mapping”、
..}
对象就可以创建所需的数组 — (数据中的var prop){没有做任何事情。当然,你没有成功。你的实际尝试是什么?实际上,问题似乎与即将出现的动态数据有关。当我尝试分配数据的逻辑或下面的任何函数时,我不确定是什么导致了它,但如果我分配了动态json并使用根据这种逻辑,我无法读取UndefinedHanks guys的属性'length'。但我仍然无法读取undefined的属性'length'。不确定动态数据的格式有什么问题。奇怪的是,如果我复制相同的数据,并将其作为硬编码值提供给数据,然后运行这些函数,它就可以工作了。你可能需要发布你所有的code…构建阵列时出现问题。
let jsonObject =JSON.parse(savedDiagramModel);