Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-从json对象提取数组_Javascript_Arrays_Json_Performance_Algorithm - Fatal编程技术网

javascript-从json对象提取数组

javascript-从json对象提取数组,javascript,arrays,json,performance,algorithm,Javascript,Arrays,Json,Performance,Algorithm,假设我们有以下json对象: [{"a1" : "a1Val", "a2" : "a2Val", "a3" : "a3Val"}, {"b1" : "b1Val", "b2" : "b2Val", "b3" : "b3Val"}, .... {"z1" : "z1Val", "z2" : "z2Val", "z3" : "z3Val"}] 我们如何从这个只有X2个键值对的对象数组中检索 意思是,以下结果: [ {"a2" : "a2Val"}, {"b2" : "b2Val"},

假设我们有以下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"}] 

希望它足够清晰。

在阵列上执行forEach循环。然后为每个值获取带有正则表达式的键。().
我不会给你完整的代码,因为它很容易实现,而且是一个很好的学习体验。

转换到数组,映射键,过滤结果,等等。 这应该适合您:

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);
  }
}
var集合、key、obj、objArr、i、len、tmp;
集合=[
{
“a1”:“a1Val”,
“a2”:“a2Val”,
“a3”:“a3Val”
}, {
“b1”:“b1Val”,
“b2”:“b2Val”,
“b3”:“b3Val”
}
];
objArr=[];
对于(_i=0,_len=collection.length;_i<_len;_i++){
obj=收集[_i];
用于(输入obj){
_tmp={};
_tmp[key]=obj[key];
目标推力(tmp);
}
}

您可能会发现,在使用恢复器函数解析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,函数(键,值){
if(key!==“”&&typeof值==='object'){
Object.keys(值).forEach(函数(名称){
if(name.slice(-1)!='2'){
删除值[名称];
}
});
}
返回值;
});
document.body.appendChild(document.createTextNode(JSON.stringify(data))


在这个resArr中,我将它映射到initialArr[],从中生成一个名为resArr的数组,每个元素initialArr表示为“x”,在这个x中,x现在是一个对象,以获取对象x[1]的第二个元素,所以这里,1表示第二个元素,因为索引从0,1、、开始,,,因此,我们需要通过object.keys(x)[1]…来获取该对象的键。因此,值将是x[object.keys(x)[1]。

您的结果不是有效数组。您想要一个对象(
{“a2”:“a2Val”,“b2”:“b2Val”…}
);对象数组(
[{“a2”:“a2Val”}、{“b2”:“b2Val”}……]
)或其他什么?这是数据的实际格式吗?你会一直有a到z吗?我想你的意思是你想要一本只有指定对的字典?问题是字典没有排序。这些键真的包含数字吗?@Paul Roub,我想要一个对象数组。。我会更新的question@SanjayManohar,键不必包含数字..与您的想法相同,但您的解决方案更为奇特。该死,我喜欢你在返回声明中使用
的方式@Qwerty啊!您是第一个了解逗号运算符用法的人。谢谢:)@AmitJoki,谢谢,这是我看到的最优雅的方式。我会用你的方式@约翰史密斯很高兴能帮助你:)我也想得到这个答案!请添加一个更详细的解释-很好,但直接在你的答案上,而不是在评论上。
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]];
});