簡體   English   中英

javascript-從json對象提取數組

[英]javascript - extract array from json object

假設我們有以下json對象:

[{"a1" : "a1Val", "a2" : "a2Val", "a3" : "a3Val"}, 
 {"b1" : "b1Val", "b2" : "b2Val", "b3" : "b3Val"},

 ....

 {"z1" : "z1Val", "z2" : "z2Val", "z3" : "z3Val"}]

我們如何從僅X2鍵值對的對象數組中檢索。

意思是,以下結果:

 [ {"a2" : "a2Val"}, {"b2" : "b2Val"}, ... ,{ "z2" : "z2Val"}] 

在最佳性能范圍內。

密鑰不必包含數字。

我在這里需要的是一個將接收參數的函數-i並返回原始json對象中所有第i個對象的數組

例如,如果我們看上面的json對象,然后調用方法2,該方法將返回

 [ {"a2" : "a2Val"}, {"b2" : "b2Val"}, ... ,{ "z2" : "z2Val"}] 

希望它足夠清楚。

你可以在這里使用Array.map

var arr = oldArr.map(function(obj){
    var key = Object.keys(obj).sort()[1], rtn = {};    
    return rtn[key] = obj[key], rtn;
});

您正在做的是獲取第二個鍵,然后返回具有該鍵和值的新Object。

var initialArr = [
                  {"a1" : "a1Val", "a2" : "a2Val", "a3" : "a3Val"}, 
                  {"b1" : "b1Val", "b2" : "b2Val", "b3" : "b3Val"},
                  {"z1" : "z1Val", "z2" : "z2Val", "z3" : "z3Val"}
                 ];

var resArr = initialArr.map(function(x){
    return x[Object.keys(x)[1]];
});

jsFiddle演示

在這里,在此resArr中,我將其映射到initialArr [],以從中生成一個名為resArr的數組,每個元素initialArr在此x中均表示為“ x”,這是一個對象,現在可以獲取該對象的第二個元素x [1]因此,這里的1代表第二個元素,因為索引從0,1,...開始,因此我們需要通過Object.keys(x)[1] ...獲得該對象的鍵,因此值將是x [Object.keys(x)[1]]。

這是一種完全按照您的要求做的花哨的方法。 微調后適用於任何東西

var json   = '[{"a1" : "a1Val", "a2" : "a2Val", "a3" : "a3Val"},{"b1" : "b1Val", "b2" : "b2Val", "b3" : "b3Val"},{"z1" : "z1Val", "z2" : "z2Val", "z3" : "z3Val"}]',
    parsed = JSON.parse(json),
    index  = 2, // here goes your value

    result = parsed.map(function(obj){
               var key = Object.keys(obj)[0][0]+index,
                   retDict = {};
               return retDict[key] = obj[key], retDict;
             });

在控制台中運行它,看看。

您可能會發現,使用reviver函數解析JSON字符串時,這樣做更有效。 這樣的事情。

 var json = '[{"a1" : "a1Val", "a2" : "a2Val", "a3" : "a3Val"},{"b1" : "b1Val", "b2" : "b2Val", "b3" : "b3Val"},{"z1" : "z1Val", "z2" : "z2Val", "z3" : "z3Val"}]', data = JSON.parse(json, function (key, value) { if (key !== "" && typeof value === 'object') { Object.keys(value).forEach(function (name) { if (name.slice(-1) !== '2') { delete value[name]; } }); } return value; }); document.body.appendChild(document.createTextNode(JSON.stringify(data))); 

在數組上執行forEach循環。 然后為每個值獲取帶有正則表達式的鍵。 使用正則表達式鍵匹配Javascript遍歷對象獲取值 )。 我不會給您完整的代碼,因為它易於實現,並且是一種很好的學習體驗。

轉換為數組,映射鍵,篩選結果,合並所有內容,等等。這應該對您有用:

var result = arr
    .map(function (obj) { 
        return Object.keys(obj).map(function (key) {
            var result = {};
            result[key] = obj[key];

            if (key.substring(1) === "2") {
                return result;
            }
        });
    })
    .reduce(function (x, y) { return x.concat(y); }, [])
    .filter(function (obj) { return obj });

參見工作提琴

那這個呢:

var collection, key, obj, objArr, _i, _len, _tmp;

collection = [
  {
    "a1": "a1Val",
    "a2": "a2Val",
    "a3": "a3Val"
  }, {
    "b1": "b1Val",
    "b2": "b2Val",
    "b3": "b3Val"
  }
];

objArr = [];

for (_i = 0, _len = collection.length; _i < _len; _i++) {
  obj = collection[_i];
  for (key in obj) {
    _tmp = {};
    _tmp[key] = obj[key];
    objArr.push(_tmp);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM