[英]Using knockout with an associative array
我對使用剔除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:
不使用任何工具包/庫/框架,這已經是(應該)很簡單的任務。
首先,請注意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
數組並“實時”生成輸出行:
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
其中,格式化問題似乎是您所追求的
.observableArray
方法僅接受null或未定義的數組。
Error: The argument passed when initializing an observable array must be an
array, or null, or undefined.
您應該處理數據以准備對象數組。
這是我更改為您的代碼以使其正常工作的內容。 看看這個!
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.