簡體   English   中英

javascript對象從鍵數組獲取值數組

[英]javascript object get array of values from array of keys

我有一個鍵數組: var keys = ["key1","key2","key3"]和一個對象數組:

var objArr= [
    {"key0":1,"key1":2,"key2":3,"key3":4},
    {"key0":5,"key1":6,"key2":7,"key3":8}
]

我希望能夠基於鍵數組從對象數組中獲取值。 例如,其輸出將為valueArr = [[2,3,4],[6,7,8]]

我嘗試了以下方法:

var result = objArr.map(function(a) {
    for (var i=0;i<keys.length;i++){
        return a[keys[i]];
    };
})

但這返回[2,6],因為它只是返回它到達的第一個值。 我不確定如何解決它,因此感謝您的幫助!

在數組中推送value並從Array#map返回array

 var keys = ["key1", "key2", "key3"]; var objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }]; var result = objArr.map(function(a) { var arr = []; for (var i = 0; i < keys.length; i++) { arr.push(a[keys[i]]); }; return arr; }); console.log(result); 

或使用Array#mapArray#map

 var keys = ["key1", "key2", "key3"]; var objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }]; var result = objArr.map(function(a) { return keys.map(function(key) { return a[key]; }); }); console.log(result); 

不要太早return ,循環只會經歷第一個項目:

var result = objArr.map(function(a) {
    var resp = [];
    for (var i=0;i<keys.length;i++){
        resp.push(a[keys[i]]);            
    };
    return resp;
})

作為替代方案 ,你可以使用Object.values()函數,建議在這里 例:

var objArr= [
    {"key0":1,"key1":2,"key2":3,"key3":4},
    {"key0":5,"key1":6,"key2":7,"key3":8}
];

for(var i in objArr){
    objArr[i] = Object.values(objArr[i]);
}

不過,目前Internet Explorer,Opera或Safari不支持此功能

您可以使用嵌套的Array#map

 var keys = ["key1", "key2", "key3"], objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }], result = objArr.map(function (a) { return keys.map(function (k) { return a[k]; }); }); console.log(result); 

ES6

 var keys = ["key1", "key2", "key3"], objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }], result = objArr.map(a => keys.map(k => a[k])); console.log(result); 

您需要將值推送到數組上, return將立即中斷執行並返回值。

嘗試這個:

var result = objArr.map(function(a) {
    var res = [];
    for (var i=0;i<keys.length;i++){
        res.push(a[keys[i]]);
    };
    return res;
})

暫無
暫無

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

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