我正在尝试编写一个函数,该函数可以将字段名称作为参数,并从一些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。
答案 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];
});
}
输出