在JSON查询中使用变量

时间:2016-09-11 12:20:55

标签: javascript json

我正在尝试编写一个函数,该函数可以将字段名称作为参数,并从一些JSON返回相应值的数组。

示例对象:

var myObject = [
   {"x": 10, "y": 10},
   {"x": 20, "y": 10},
   {"x": 20, "y": 20},
   {"x": 10, "y": 20}
];

我的功能看起来像这样:

function getValues(desiredValue) {
   var values = [];
   for (i = 0; i < myObject.length; i++) {
      values[i] = myObject[i].desiredValue;
   }
   return values;
}
getValues(x);

理想情况下,我会将x参数传递给getValues,而不是查找名为desiredValue的字段名称,而是查找名为x的字段名称。

返回的数组应如下所示:

[10,20,20,10]

由于此代码的问题很明显,我如何才能获得所需的结果?

另外,我试图避免不必要的依赖,所以除非绝对必要,否则请不要给我任何JQuery。

4 个答案:

答案 0 :(得分:1)

您可以使用map()返回所需的结果。

var myObject = [
   {"x": 10, "y": 10},
   {"x": 20, "y": 10},
   {"x": 20, "y": 20},
   {"x": 10, "y": 20}
];

function getValues(desiredValue) {
  return myObject.map(e => e[desiredValue]);
}

console.log(getValues('x'))

答案 1 :(得分:0)

您实际上需要使用JSON.parse()解析给定的JSON字符串(不是您在此处给出的数组)。请参阅:http://jsbin.com/kevoqe/edit?js,console

答案 2 :(得分:0)

一个简单的实用程序

//also accepts a path like "foo.bar.baz"
//returns undefined if path can't be resolved
function fetch(path){
    var keys = path.split(".");
    return function( target ){
        for(var t = target, i = 0; i < keys.length; t = t[ keys[ i++ ] ])
            if(t == null) return void 0;
        return t;
    }
}

它的用法

var myObject = [
    {"x": 10, "y": 10},
    {"x": 20, "y": 10},
    {"x": 20, "y": 20},
    {"x": 10, "y": 20}
];

var result = myObject.map( fetch("y") );

这个版本比Array.map()硬连线更灵活,因为它可以很容易地与其他功能组合。

虽然,特别是在这种特殊情况下,这已经有点过分了。在这里你可以轻松地写:

var result = myObject.map(pt => pt.y);

你不能变得更短更简单。或者,如果由于某种原因,该属性确实是动态的,您将有一些包含它的变量:

var dynamicPropertyName = "y";
//...
var result = myObject.map(pt => pt[ dynamicPropertyName ]);

答案 3 :(得分:0)

使用array map方法在对象数组中进行操作。

试用此代码:

var myObject = [
   {"x": 10, "y": 10},
   {"x": 20, "y": 10},
   {"x": 20, "y": 20},
   {"x": 10, "y": 20}
];

var output = getValues("x");
console.log(output);

function getValues(desiredValue) {
  return myObject.map(function(item) {
      return item[desiredValue];   
  });
}

输出

enter image description here

工作小提琴: https://jsfiddle.net/ffyjyzjb/