2016-03-21 98 views
2

我有一個這樣的對象...訪問對象中的var對象

"data": { 

    "1": { 
     "id": 32, 
     "name": "E", 
     "link": "", 
    }, 
    "2": { 
     "id": 33, 
     "name": "EC", 
     "link": "", 
    }, 

}

我怎麼可以設置使用上述瓦爾每個「鏈接」的價值?比如我希望做一些事情像

"data": { 

    "1": { 
    "id": 32, 
    "name": "E", 
    "link": "id="+this.id+" and name="+this.name, 
    }, 
    "2": { 
    "id": 33, 
    "name": "EC", 
    "link": "id="+this.id+" and name="+this.name, 
    }, 

爲了使這樣的對象...

"data": { 

    "1": { 
    "id": 32, 
    "name": "E", 
    "link": "id=32 and name=E", 
    }, 
    "2": { 
    "id": 33, 
    "name": "EC", 
    "link": "id=33 and name=EC", 
    }, 
+0

有什麼問題你嘗試?你是否嘗試過你想要的代碼? –

+0

你有什麼嘗試?你有沒有設置執行此操作的循環? –

+0

您可以創建一個訪問器屬性或在事實之後進行計算。 –

回答

1

我建議遍歷屬性並更改需要的項目。

var object = { data: { "1": { "id": 32, "name": "E", "link": "", }, "2": { "id": 33, "name": "EC", "link": "", } } }; 
 

 
Object.keys(object.data).forEach(function (k) { 
 
    object.data[k].link = 'id=' + object.data[k].id + ' and name=' + object.data[k].name; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

0

我通常使它成爲一個功能:

"data": { 

    "1": { 
    "id": 32, 
    "name": "E", 
    "get_link": function() { return "id="+this.id+" and name="+this.name } 
    } 

} 

然後你訪問它就像whatever.get_link()

0

有着手解決這個兩種方式。

您可以創建後處理器來處理佔位符值。我做了一個通用的預處理器,它應該動態搜索所有字符串屬性的佔位符。

var linkStore = { 
 
    "data": { 
 
    "1": { 
 
     "id": 32, 
 
     "name": "E", 
 
     "link": "id={{id}} and name={{name}}" 
 
    }, 
 
    "2": { 
 
     "id": 33, 
 
     "name": "EC", 
 
     "link": "id={{id}} and name={{name}}" 
 
    } 
 
    } 
 
}; 
 

 
function postProcess(data, root) { 
 
    var records = root != null ? data[root] : data; 
 
    Object.keys(records).forEach(function(recordId) { 
 
    var record = records[recordId]; 
 
    Object.keys(record).forEach(function(property) { 
 
     if (typeof record[property] === 'string') { 
 
     record[property] = record[property].replace(/{{(\w+)}}/g, function(match, value) { 
 
      return record[value]; 
 
     }); 
 
     } 
 
    }); 
 
    }); 
 
    return data; 
 
} 
 

 
var result = postProcess(linkStore, 'data'); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 2) + '</pre>';

或者,如果你不想修改原始數據。您可以添加要應用於每個記錄的屬性映射。

var linkStore = { 
 
    "data": { 
 
    "1": { 
 
     "id": 32, 
 
     "name": "E", 
 
     "link": "" 
 
    }, 
 
    "2": { 
 
     "id": 33, 
 
     "name": "EC", 
 
     "link": "" 
 
    } 
 
    } 
 
}; 
 

 
function postProcess(data, root, propertyMap) { 
 
    var records = root != null ? data[root] : data; 
 
    Object.keys(records).forEach(function(recordId) { 
 
    var record = records[recordId]; 
 
    Object.keys(propertyMap).forEach(function(property) { 
 
     record[property] = propertyMap[property].call(record, record[property]); 
 
    }); 
 
    }); 
 
    return data; 
 
} 
 

 
var result = postProcess(linkStore, 'data', { 
 
    link : function(oldValue) { 
 
    return 'id=' + this.id + ' and name=' + this.name 
 
    } 
 
}); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 2) + '</pre>';