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
和 return 原始 json 对象
中所有第 i 个对象的数组
例如,如果我们查看上面的 json 对象
然后我们调用方法 2 该方法将 return
[ {"a2" : "a2Val"}, {"b2" : "b2Val"}, ... ,{ "z2" : "z2Val"}]
希望已经足够清楚了。
对数组执行 forEach 循环。然后为每个值获取带有正则表达式的键。 (Loop through object get value using regex key matches 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 });
你可以在这里使用Array.map
var arr = oldArr.map(function(obj){
var key = Object.keys(obj).sort()[1], rtn = {};
return rtn[key] = obj[key], rtn;
});
您正在做的是获取第二个键,然后返回一个包含该键和值的新对象。
这是一种完全按照您的要求进行操作的奇思妙想。稍微调整后适用于任何东西
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;
});
运行这个在控制台看看。
这个怎么样:
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);
}
}
您可能会发现,在使用 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)));
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]];
});
在这个 resArr 中,我将它映射到 initialArr[ ],从中生成一个名为 resArr 的数组,每个元素 initialArr 表示为 'x' 在这个 x 中现在是一个对象 inorde获取对象 x[1] 的第二个元素,所以在这里,1 代表第二个元素,因为索引从 0,1 开始,所以我们需要通过 Object.keys(x)[1 获取该对象的键]...因此值为 x[Object.keys(x)[1]].
假设我们有以下 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 和 return 原始 json 对象
中所有第 i 个对象的数组例如,如果我们查看上面的 json 对象 然后我们调用方法 2 该方法将 return
[ {"a2" : "a2Val"}, {"b2" : "b2Val"}, ... ,{ "z2" : "z2Val"}]
希望已经足够清楚了。
对数组执行 forEach 循环。然后为每个值获取带有正则表达式的键。 (Loop through object get value using regex key matches 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 });
你可以在这里使用Array.map
var arr = oldArr.map(function(obj){
var key = Object.keys(obj).sort()[1], rtn = {};
return rtn[key] = obj[key], rtn;
});
您正在做的是获取第二个键,然后返回一个包含该键和值的新对象。
这是一种完全按照您的要求进行操作的奇思妙想。稍微调整后适用于任何东西
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;
});
运行这个在控制台看看。
这个怎么样:
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);
}
}
您可能会发现,在使用 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)));
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]];
});
在这个 resArr 中,我将它映射到 initialArr[ ],从中生成一个名为 resArr 的数组,每个元素 initialArr 表示为 'x' 在这个 x 中现在是一个对象 inorde获取对象 x[1] 的第二个元素,所以在这里,1 代表第二个元素,因为索引从 0,1 开始,所以我们需要通过 Object.keys(x)[1 获取该对象的键]...因此值为 x[Object.keys(x)[1]].