我很擅长使用淘汰赛JS,所以任何帮助都会非常感激! 所以基本上我有这样的数据:
[{
"gjr":{
"id":"gjr",
"firstname":"one",
"companyid":"ff05t5",
"companyname":"GMC"
},
"68g":{
"id":"68g",
"firstname":"two",
"companyid":"ff05t5",
"companyname":"GMC"
},
"ghj":{
"id":"ghj",
"firstname":"three",
"companyid":"a23atr",
"companyname":"Ford"
},
"68f":{
"id":"68f",
"firstname":"four",
"companyid":"ff05t5",
"companyname":"GMC"
},
"f78":{
"id":"f78",
"firstname":"five",
"companyid":"gjd94d",
"companyname":"Jaguar"
},
"fh5":{
"id":"fh5",
"firstname":"six",
"companyid":"gjd94d",
"companyname":"Jaguar"
}
}]
我想要做的是用这些数据填充一个表,所以它看起来像这样:
ID FirstName CompanyID CompanyName<br/>
gjr one ff05t5 GMC<br/>
68g two ffo5t5 GMC<br/>
ghj three a23atr Ford<br/>
等等......
我想知道这是否可能使用淘汰赛js还是有更好的方法?
到目前为止,我有一个JSFiddle:
答案 0 :(得分:3)
不使用任何类型的任何工具包/ lib /框架,这已经(应该)是一项非常简单的任务 首先,请注意JS没有关联数组,它有数组(实质上是扩充对象)和对象。你正在处理后者。
我是这样做的:
var data = yourData[0],//your data is an array, containing a single object literal
header = [];
tbl = {},
p, p2;
for(p in data)
{
if (data.hasOwnProperty(p))
{
for (p2 in data[p])
{
if (data[p].hasOwnProperty(p2))
{
if (!tbl.hasOwnProperty(p2))
{
header.push(p2);//add header value
tbl[p2] = [];//create array
}
tbl[p2].push(data[p][p2]);
}
}
}
}
然后,您有header
数组列出了所有可用的键,在tbl
对象中,您可以找到与每个键一起使用的值数组。编写一个打印出你需要打印出来的循环应该很容易
或者,您可以使用header
数组并生成输出行“real-time”:
var data = yourData[0],//your data is an array, containing a single object literal
header,//leave undefined
row = [],
tbl = [],
p, i, p2;
for(p in data)
{
if (data.hasOwnProperty(p))
{
if (header === undefined)
{
header = [];
for (p2 in data[p])
header.push(p2);
tbl.push(header.join("\t"));
}
for (i=0;i<header.length;++i)
row.push(data[p][header[i]]);
tbl.push(row.join("\t"));
row = [];//re-initialize
}
}
console.log(tbl.join("\n"));//should be pretty accurate
现在,这将适用于我所知道的所有浏览器,包括有些人坚持使用的那些糟糕的旧IE。如果您对这些浏览器不太关心(不管怎么说),您可以轻松地写下这个:
var data = yourData[0],//your data is an array, containing a single object literal
header;//leave undefined
str = '';//output string
p, i;
for(p in data)
{
if (header === undefined)
{//first time over
header = Object.getOwnPropertyNames(data[p]);
str = header.join("\t") + "\n";//stringify, tab separated, add new line
}
for (i=0;i<header.length;++i)
str += data[p][header[i]] + "\t";//add value
str += "\n";
}
console.log(str);//should be close to what you need
声明
我已经把这个代码写进了我的头脑,没有经过测试,所以你可能还有一些调试工作在你面前。所有这三个片段都是IMO,非常不言自明,但如果不是很清楚的话,可以随意询问给定语句的更多细节。
注意:
添加此免责声明后,我确实测试了我在控制台中给出的最后一个片段,结果是:
id firstname companyid companyname gjr one ff05t5 GMC 68g two ff05t5 GMC ghj three a23atr Ford 68f four ff05t5 GMC f78 five gjd94d Jaguar fh5 six gjd94d Jaguar
其中,格式化协助似乎就是你所追求的
答案 1 :(得分:1)
.observableArray
方法只接受数组,null或undefined。
Error: The argument passed when initializing an observable array must be an
array, or null, or undefined.
您应该处理数据以准备一系列对象。
Here是我更改为您的代码以使其正常工作的原因。看看吧!
希望它有所帮助。