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]];
};
})
但是这个 returns [2,6] 因为它只是返回它到达的第一个值。我不确定如何修复它,所以感谢您的帮助,谢谢!
不要return
太早,循环只经过第一项:
var result = objArr.map(function(a) {
var resp = [];
for (var i=0;i<keys.length;i++){
resp.push(a[keys[i]]);
};
return resp;
})
将 value
推入数组并从 Array#map
推入 return 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#map
中使用 Array#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
将立即中断执行并 return 值。
试试这个:
var result = objArr.map(function(a) {
var res = [];
for (var i=0;i<keys.length;i++){
res.push(a[keys[i]]);
};
return res;
})
作为 替代方案,您可以使用 Object.values()
函数,如 here 所建议。示例:
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);
我有一个键数组: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]];
};
})
但是这个 returns [2,6] 因为它只是返回它到达的第一个值。我不确定如何修复它,所以感谢您的帮助,谢谢!
不要return
太早,循环只经过第一项:
var result = objArr.map(function(a) {
var resp = [];
for (var i=0;i<keys.length;i++){
resp.push(a[keys[i]]);
};
return resp;
})
将 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#map
Array#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
将立即中断执行并 return 值。
试试这个:
var result = objArr.map(function(a) {
var res = [];
for (var i=0;i<keys.length;i++){
res.push(a[keys[i]]);
};
return res;
})
作为 替代方案,您可以使用 Object.values()
函数,如 here 所建议。示例:
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);