我有一个数组:
var cols = ["ticker", "highPrice", "lowPrice","lastPrice"] // dynamic
Json数据来自后端:
info = {ticker: "AAPL", marketCap: 2800000000, lowPrice: 42.72, highPrice: 42.84}
假设我想选择市值,那么我可以info.marketCap
。但我想只选择那些键等于cols i.e. info.ticker, info.highPrice, info.lowPrice
并将N / A分配给json中未定义但存在于cols数组中的那些,即info.lastPrice = "N/A"
注意:cols不时变化
这是我到目前为止的内容
SyScreener.fillScreenerResult = function(info) {
var cols = ["ticker", "highPrice", "lowPrice", "openPrice", "lastPrice", "currentVol", "avgVol"];
var data = [];
for(var i=0; i<info.length; i++) {
var jsonKeys = Object.keys(info[i]);
for(var j=0; j<jsonKeys.length; i++) {
if(cols.contains(jsonKey[j])) {
// TODO something like - data.push([info[i].jsonKey[j])
} else {
// TODO something like - info[i].colsValue = "N/A"
}
}
}
SyUtils.createDataTable("screener_result", data);
};
答案 0 :(得分:1)
var cols = ["ticker", "highPrice", "lowPrice","lastPrice"];
info = {ticker: "AAPL", marketCap: 2800000000, lowPrice: 42.72, highPrice: 42.84};
for(var c = 0, clen = cols.length; c < clen; c++) {
if( !(cols[c] in info) ) {
console.log("N/A");
}
else {
console.log(info[cols[c]]);
}
}
演示:: jsFiddle
答案 1 :(得分:1)
我可能没有正确地阅读你的问题,但根据我的理解,我可能会建议这样的事情。
for (var i=0; i<cols.length; i++) {
var fieldName = cols[i];
if (!info.hasOwnProperty(fieldName)) {
info[fieldName] = 'N/A';
}
}
这只是遍历cols中的每个字段名称,并检查它是否是info JSON对象的属性。如果它尚未存在,则循环将为该属性添加值“N / A”。
答案 2 :(得分:0)
var cols = ["ticker", "highPrice", "lowPrice","lastPrice"]
var info = {ticker: "AAPL", marketCap: 2800000000, lowPrice: 42.72, highPrice: 42.84}
var output = {};
for(each in info) {
var index = cols.indexOf(each)
if(index != -1) {
output[each] = info[each];
//remove extra already checked element
cols.splice(index,1)
}
}
//append remaining keys
for(var i=0;i<cols.length;i++) {
output[cols[i]] = "N/A"
}
console.log(output)
//output Object {ticker: "AAPL", lowPrice: 42.72, highPrice: 42.84, lastPrice: "N/A"}
答案 3 :(得分:-1)
首先,您需要对JSON数据进行反序列化。 要使用jQuery执行此操作,请使用此处可以找到的函数parseJson http://api.jquery.com/jquery.parsejson/ 一旦你反序列化它,你可以用这些数据做任何你想做的事情,因为你把它作为一个普通的javascript数组来操作。希望这会有所帮助。