![](/img/trans.png)
[英]Convert Json object to Json array of key-value pair in javascript
[英]Retrieving Keys from JSON Array key-value pair dynamically - Javascript
我有一個想要尋求你的專業知識的問題。
這是我擁有的JSON數組:
[{"A":20,"B":32,"C":27,"D":30,"E":40}]
我想要做的是從JSON數組中檢索鍵(A,B,C,D,E)而不是值。 我能夠檢索值而不是鍵。
我正在使用它來動態檢索值:
function calculateSum(jsonArray) {
var result = 0;
for (var i = jsonArray.length - 1; i >= 0; --i)
{
var o = jsonArray[i];
A = o.A;
B = o.B;
C = o.C;
D = o.D;
E = o.E;
result = A + B + C + D + E;
return result;
}
return result;
}
同樣,我該怎么做才能使用JavaScript檢索密鑰 ?
您是否正在使用D3.js標簽? 因為在這種情況下,您可以使用d3.keys()
:
var data = [{"A":20,"B":32,"C":27,"D":30,"E":40}];
d3.keys(data[0]); // ["A", "B", "C", "D", "E"]
如果你想要所有值的總和,你可能最好使用d3.values()
和d3.sum()
:
var data = [{"A":20,"B":32,"C":27,"D":30,"E":40}, {"F":50}];
// get total of all object totals
var total = d3.sum(data, function(d) {
// get total of a single object's values
return d3.sum(d3.values(d));
});
total; // 199
所有當前發布的解決方案都存在問題。 當使用for ... in循環迭代對象時,他們都沒有檢查object.hasOwnProperty(prop)
。 如果將屬性添加到原型中,這可能會導致出現幻像鍵。
請注意,添加到對象原型的成員將包含在枚舉中。 使用hasOwnProperty方法來區分對象的真實成員是明智的。
將hasOwnProperty
的檢查添加到maerics的優秀解決方案中。
var getKeys = function (arr) {
var key, keys = [];
for (i = 0; i < arr.length; i++) {
for (key in arr[i]) {
if (arr[i].hasOwnProperty(key)) {
keys.push(key);
}
}
}
return keys;
};
for .. in
:
var result = 0;
for (var i = jsonArray.length - 1; i >= 0; --i) {
var o = jsonArray[i];
for (var key in o) {
if (o.hasOwnProperty(key)) {
result += o[key];
}
}
// in your code, you return result here,
// which might not give the right result
// if the array has more than 1 element
}
return result;
var easy = {
a: 1,
b: 2,
c: 3
}
var keys = [], vals = []
for (var key in easy) {
keys.push(key)
vals.push(easy[key])
}
alert(keys+" - tha's how easy baby, it's gonna be")
alert(vals+" - tha's how easy baby, it's gonna be")
包括@ Sahil的防御方法......
for (var key in easy) {
if (easy.hasOwnProperty(key)) {
keys.push(key)
vals.push(easy[key])
}
}
我認為這是最簡單的。
var a = [{"A":20,"B":32,"C":27,"D":30,"E":40}];
Object.keys( a[0] );
結果:
["A", "B", "C", "D", "E"]
嘗試使用JavaScript for..in
聲明 :
var getKeys = function(arr) {
var key, keys = [];
for (i=0; i<arr.length; i++) {
for (key in arr[i]) {
keys.push(key);
}
}
return keys;
};
var a = [{"A":20, "B":32, "C":27, "D":30, "E":40}, {"F":50}]
getKeys(a); // => ["A", "B", "C", "D", "E", "F"]
嘗試這個。 很簡單:
var a = [{"A":20,"B":32,"C":27,"D":30,"E":40}];
for(var i in a){
for(var j in a[i]){
console.log(j); // shows key
console.log(a[i][j]); // shows value
}
}
我認為這應該像下面一樣遞歸地解析
var getKeys = function(previousKeys,obj){
var currentKeys = Object.keys(obj);
previousKeys = previousKeys.concat(currentKeys);
for(var i=0;i<currentKeys.length;i++){
var innerObj = obj[currentKeys[i]];
if(innerObj!==null && typeof innerObj === 'object' && !Array.isArray(innerObj)){
return this.getKeys(previousKeys,innerObj);
}
}
return previousKeys;
}
用法: getKeys([],{"a":"1",n:{c:"3",e:{ f:4,g:[1,2,3]}}})
結果:[“a”,“n”,“c”,“e”,“f”,“g”]
var _ = require('underscore');
var obj = [{"A":20,"B":32,"C":27,"D":30,"E":40},{"F":50}, {"G":60,"H":70},{"I":80}];
var keys = [], values = [];
_.each(obj, function(d) {
keys.push(_.keys(d));
values.push(_.values(d));
});
// Keys -> [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' ]
console.log('Keys -> ', _.flatten(keys ));
// Values -> [ 20, 32, 27, 30, 40, 50, 60, 70, 80 ]
console.log('Values -> ', _.flatten(values));
for-in
inop就可以了。 在一個對象上它看起來像這樣:
var o = {
a: 5,
b: 3
};
var num = 0;
for (var key in o) {
num += o[key];
}
alert(num);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.